14.6.1.2145 RESIZE MEMORY
Change the allocation of the contiguous data space starting at the address a-addr1, previously allocated by ALLOCATE or RESIZE, to u address units. u may be either larger or smaller than the current size of the region. The data-space pointer is unaffected by this operation.
If the operation succeeds, a-addr2 is the aligned starting address of u address units of allocated memory and ior is zero. a-addr2 may be, but need not be, the same as a-addr1. If they are not the same, the values contained in the region at a-addr1 are copied to a-addr2, up to the minimum size of either of the two regions. If they are the same, the values contained in the region are preserved to the minimum of u or the original size. If a-addr2 is not the same as a-addr1, the region of memory at a-addr1 is returned to the system according to the operation of FREE.
If the operation fails, a-addr2 equals a-addr1, the region of memory at a-addr1 is unaffected, and ior is the implementation-defined I/O result code.
See:
Testing:
addr @ 50 write-char-mem addr @ 50 check-char-mem
\ Resize smaller does not change content.
T{ addr @ 28 CHARS RESIZE SWAP addr ! -> 0 }T
addr @ 28 check-char-mem
\ Resize larger does not change original content.
T{ addr @ 100 CHARS RESIZE SWAP addr ! -> 0 }T
addr @ 28 check-char-mem
\ Resize error does not change addr
T{ addr @ -1 RESIZE 0= -> addr @ <FALSE> }T
T{ addr @ FREE -> 0 }T
T{ HERE -> datsp @ }T \ Data space pointer is unaffected
ContributeContributions
JimPeterson
[429] Resizing to/from Zero Address UnitsRequest for clarification2026-05-18 19:50:35
No mention is made, here or for ALLOCATE, as to what happens when the specified size is zero. I can see cases where data structures may do so (perhaps inadvertently). Can we assume that such things will work properly? Should it be explicitly stated to work, or is it assumed to do so, since there is no verbiage stating otherwise?
(If the standard declared that resizing to 0 units must return the a-addr2 equal to 0, then RESIZE would be the only necessary word, as ALLOCATE could be 0 SWAP RESIZE and FREE could be 0 RESIZE NIP)