z/OS PL/I CONTROLLED 变量是否在过程的单独调用之间保留?假设我们需要一个在子例程内部并在调用之间保留的计数器。最简单的方法是使用初始化为零的静态变量,并在子例程的每个条目上递增。但是如果程序必须是可重入的,你就不能这样做。所以问题是我们是否可以访问在先前调用中分配的受控变量。下面的代码会起作用吗?
PROC1: PROCEDURE OPTIONS(MAIN);
...
CALL A;
...
A: PROCEDURE;
DECLARE COUNT CONTROLLED ALIGNED FIXED BIN(15);
IF (ALLOCATION(COUNT) = 0)
THEN ALLOCATE COUNT INIT(1);
ELSE COUNT = COUNT + 1;
...
END A;
END PROC1;
根据 PL/I Language Reference,在 ALLOCATE 一个变量之后,您不需要释放它(尽管这通常是一种好的做法),并且“所有受控存储都在程序结束时被释放”。它并没有说存储在块的末尾被释放。PL/I 编程指南在定位受控变量部分的使用 PLIDUMP 一章中提供了一些线索,但它不是确定的。它说定位受控变量的关键是找到它的锚。NORENT WRITABLE 在静态存储中有一个锚。NORENT NOWRITABLE(FWS) 有一个锚点自动存储的地址。(有一个额外的间接级别。)使用 NORENT NOWRITABLE(PRV) 似乎有一个静态表,其中每个受控变量的私有表都有一个偏移量。换句话说,根据处理选项,也许变量是可访问的,也许不是。它没有说明使用 RENT 选项。有什么想法吗?