$S[TORAGE] contains an integer value specifying difference between the current $ZREALSTOR as a subtrahend and, in order of precedence, $ZMALLOCLIM if it has a non-zero value, the process R_LIMIT if it is not unlimited, and otherwise the maximum of a 64-bit address space.
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.