Пример кода для более разумного использования памяти структур. Полезность данной функции 15%. Просто попытка урезать выделение памяти для нескольких структур... не для имитации struct. А для массивов..
library StructSaveMemory
    globals
        integer array StructSize
        integer array StructMaxSize
        integer array StructBuffer
        integer array StructBufferSize
        boolean array StructBufferFree
        integer StructPointer = -1
        integer StructBufferResult = 0
    endglobals

    function StructBufferRange takes integer Size returns integer
        local integer Buffer = 0
        local integer BufferEnd = Size
        if StructPointer >= 0 then
            set Buffer = StructSize[StructPointer]
            set BufferEnd = BufferEnd + StructSize[StructPointer]
        endif
        loop
            set StructBufferFree[Buffer] = true
            set Buffer = Buffer + 1
        exitwhen Buffer == BufferEnd
        endloop
        set StructSize[StructPointer] = -1
        set StructBufferSize[StructPointer] = -1
        set StructPointer = StructPointer + 1
        set StructMaxSize[StructPointer] = BufferEnd
        
        set Buffer = 0
        set BufferEnd = 0
        return StructPointer
    endfunction

    function AllocateBufferStruct takes integer Index returns integer 
            if StructBufferSize[Index] >=  0 then
                set StructBufferResult = StructBuffer[StructBufferSize[Index]]
                set StructBufferSize[Index] = StructBufferSize[Index] - 1
            else
                if StructSize[Index] < StructMaxSize[Index] then
                    set StructSize[Index] = StructSize[Index] + 1
                    set StructBufferResult = StructSize[Index]
                else
                    if Index > 0 then
                        set StructBufferResult = StructMaxSize[Index-1]
                    else
                        set StructBufferResult = 0
                    endif
                endif
            endif
            set StructBufferFree[StructBufferResult] = false
            return  StructBufferResult - StructMaxSize[Index]
    endfunction

    function DellocateBufferStruct takes integer Index, integer Element returns nothing
            if Index > 0 then
                set StructBufferResult = Element-StructMaxSize[Index-1]
            else
                set StructBufferResult = 0
            endif
            if not StructBufferFree[StructBufferResult] then
                set StructBufferSize[Index] = StructBufferSize[Index] + 1
                set StructBuffer[StructBufferSize[Index]] = StructBufferResult
                set StructBufferFree[StructBufferResult] = true
            endif
    endfunction

    function BufferStructOld takes integer Index, integer Element returns integer 
        if Index > 0 then
            return Element-StructMaxSize[Index-1]
        endif
        return Element 
    endfunction 
endlibrary
`
ОЖИДАНИЕ РЕКЛАМЫ...