Объясните некоторые моменты по работе этой функции.
Вот эта функция в том виде в котором она присутствует в grids.pas
function StackAlloc(Size: Integer): Pointer; register;
asm
POP ECX
MOV EDX, ESP
ADD EAX, 3
AND EAX, not 3
CMP EAX, 4092
JLE @@2
@@1:
SUB ESP, 4092
PUSH EAX
SUB EAX, 4096
JNS @@1
ADD EAX, 4096
@@2:
SUB ESP, EAX
MOV EAX, ESP
PUSH EDX
MOV EDX, ESP
SUB EDX, 4
PUSH EDX
PUSH ECX
end;
Ну что касается выравнивания - то это понятно.
А вот что делается дальше и для чего?
Имеется ввиду для чего указатель стека уменьшается не сразу на нужную величину, а кусками по 4k и в каждой такой итерации в стек пихается EAX, и судя по всему это впихнутое значение в стеке никому никогда не будет не нужно.