Информационный сервер для программистов: Исходники со всего света. Паскальные исходники со всего света
  Powered by Поисковый сервер Яndex: Найдется ВСЁ!
На Главную Pascal Форум Информер Страны мира
   Управление Памятью    >>    locvar
   
 
 Аллокация локальных переменных в стеке  Олег Харин 15.09.1995

Процедуры для выделения и освобождения памяти для локальных переменных в стеке. Работают быстрее, чем GetMem и FreeMem



1k 
 

From : Oleg Kharin <ok@ulk.udm.ru> Date: 15 Sep 1994 08:02:26 +0500 Organization: JSV Uvinsky lesokombinat Эти процедуры позволяют аллоцировать и освобождать память для локальных переменных в стеке. Преимущества перед GetMem: 1. Работает быстрее. 2. Позволяет не дробить память, если далее вызывается GetMem, а аллоцированная в стеке память освобождается. function GetStackMem(Size:word):pointer; inline($58/ { pop ax} $40/ { inc ax } { Для выравнивания на слово } $25/$FE/$FF/ { and ax,$FFFE} $2B/$E0/ { sub sp,ax} $8B/$C4/ { mov ax,sp} $8C/$D2 { mov dx,ss}); procedure FreeStackMem(Size:word); inline($58/ { pop ax} $40/ { inc ax } { Для выравнивания на слово } $25/$FE/$FF/ { and ax,$FFFE} $03/$E0 { add sp,ax } ); Пример: procedure Test(Size:word); var p : pointer; begin p := GetStackMem(Size); {Здесь можно использовать p^} FreeStackMem(Size); end; Если в программе есть локальные переменные, то в ее конце можно FreeStackMem не вызывать (т.к. SP получает в первоначальное значение из BP). Олег.