Вопрос простейший, но ведь это раздел для новичков. Есть процедура: Код (Text): MyProc proc LOCAL string[100]:BYTE ret MyProc endp Как видим в коде выделен локальный буфер в 100 байт. Вопрос: Освобождается ли эта память при выходе из процедуры? Если использовать ее скажем миллион раз будет утечка памяти? Или лучше alloc и затем free?
После выхода из процедуры, вызывается эпилог и стек правится, считай память освобождается, но чтобы большие объемы стека выделять, в пе хедере стек коммит и стек аллокейт большой должен быть. То есть если для большого кол-ва памяти лучше или хип выделять или виртуалаллок использовать. Если переменных не много, то стек лучше он побыстрее будет
Размер буфера ограничен размером страницы(4к), иначе будет обращение за пределы сторожевой страницы без расширения стека, что приведёт к крэшу. Конечно же можно стек прочитать в цикле, но это нужно сделать до вызова процедуры.
Резюмирую: Использовать можно. Просто и быстро, но не стоит злоупотреблять. Не более 4к. Спасибо большое.
zdm, Не особо просто, это буфер с особыми свойствами, не такой как оычная область памяти. Во первых такой буфер локален для потока, тоесть при возврате из процедуры он существовать уже не будет. Во вторых выше буфера расположена рабочая железячная инфа, к примеру адреса возврата и при переполнении буфера адерса возврата перетираются, возможно на произвольные адреса.