Paul and John,
I am trying to understand the benefits of using Virtual Common. The documentation states that if VC is used in SLINK, then the '.bss' section is removed and global data is allocated to virtual memory at runtime. There are two main sorts of memory, addressable and physical. Does the virtual memory discussed have an address at start/run time or allocated as accessed? Is it that only physical memory allocation is delayed to as accessed? My understanding is that VC starts from address 1gb. Potentially this limits the size of available addressed common to only 1gb, as I do not appear to be able to start a program where common extends beyond 2gb. Is this the case ? If so this would imply that VC is suited to programs that use only about 0.8gb of common. (beyond 2gb appears to be only accessible by ALLOCATE arrays with /3gb or win-64) Is it a requirement that all declared common must be less than 1gb (from 1gb to 2gb), ie the (virtual) memory address of all common is set at run time, or is memory address of common only allocated when/as it is used ? Without the use of VC I can allocate COMMON arrays of a total size of about 1.6gb. I have not been able to do that with VC. Does the comment 'The result is that pages of memory (4Kb each) are allocated from the system on demand.' refer to allocation of physical memory, or is it a more flexible interpretation for mapping of virtual memory? ie, if I have multiple named common, are they allocated a memory address when they are accessed or at run/start time? Potentially if when accessed, then I may have named COMMON defined only in program modules not accessed, not taking addressable memory. If not, then potentially the main benefit of VC is only to reduce the size of the .exe file and the memory demand at start run time. I'm not sure if it provides any way of overlaying common usage that was available in Win-16, which would provide for increased available virtual memory.
John