$S[TORAGE] contains an integer value specifying the number of free bytes of address space remaining between the memory currently under management by the process and the theoretical maximum available to the process.
GT.M uses memory for code (instructions) and data. If the amount of virtual memory available to the process exceeds 2,147,483,647 bytes, it is reported as 2,147,483,647 bytes.
Instruction space starts out with the original executable image. However, GT.M may expand instruction space by ZLINKing additional routines.
Data space starts out with stack space that never expands, and pool space which may expand. Operations such as opening a database or creating a local variable may cause an expansion in pool space. GT.M expands pool space in fairly large increments. Therefore, SETs of local variables may not affect $STORAGE at all or may cause an apparently disproportionate drop in its value.
Once a GT.M process adds either instruction or data space, it never releases that space. However, GT.M does reuse process space made available by actions such as KILLs of local variables. $STORAGE can neither be SET or NEWed.