Мастера DELPHI, Delphi programming community Рейтинг@Mail.ru Титульная страница Поиск, карта сайта Написать письмо 
| Новости |
Новости сайта
Поиск |
Поиск по лучшим сайтам о Delphi
FAQ |
Огромная база часто задаваемых вопросов и, конечно же, ответы к ним ;)
Статьи |
Подборка статей на самые разные темы. Все о DELPHI
Книги |
Новинки книжного рынка
Новости VCL
Обзор свежих компонент со всего мира, по-русски!
|
| Форумы
Здесь вы можете задать свой вопрос и наверняка получите ответ
| ЧАТ |
Место для общения :)
Орешник
Коллекция курьезных вопросов из форумов
Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / rsdn.org

 
Чтобы не потерять эту дискуссию, сделайте закладку « предыдущая ветвь | форум | следующая ветвь »

StackAlloc [D7, XP]


SergP ©   (12.06.17 10:06

Объясните некоторые моменты по работе этой функции.

Вот эта функция в том виде в котором она присутствует в grids.pas

function StackAlloc(Size: Integer): Pointer; register;
asm
 POP   ECX          { return address }
 MOV   EDX, ESP
 ADD   EAX, 3
 AND   EAX, not 3   // round up to keep ESP dword aligned
 CMP   EAX, 4092
 JLE   @@2
@@1:
 SUB   ESP, 4092
 PUSH  EAX          { make sure we touch guard page, to grow stack }
 SUB   EAX, 4096
 JNS   @@1
 ADD   EAX, 4096
@@2:
 SUB   ESP, EAX
 MOV   EAX, ESP     { function result = low memory address of block }
 PUSH  EDX          { save original SP, for cleanup }
 MOV   EDX, ESP
 SUB   EDX, 4
 PUSH  EDX          { save current SP, for sanity check  (sp = [sp]) }
 PUSH  ECX          { return to caller }
end;


Ну что касается выравнивания - то это понятно.
А вот что делается дальше и для чего?
Имеется ввиду для чего указатель стека уменьшается не сразу на нужную величину, а кусками по 4k и в каждой такой итерации в стек пихается EAX, и судя по всему это впихнутое значение в стеке никому никогда не будет не нужно.


Sha ©   (12.06.17 10:31[1]

http://www.gunsmoker.ru/2011/06/blog-post.html


SergP ©   (12.06.17 11:23[2]

Ага. Вот оно как, оказывается... Понял. Спасибо...


Rouse_ ©   (12.06.17 19:45[3]

Конечно, не в плане пиара, но чтобы понять как там все в памяти приложения фунциклирует, я давно накатал вот такую чтуку: https://github.com/AlexanderBagel/ProcessMemoryMap
Скоро перейдет в разряд беты, как допилю один из требуемых мне функционалов


версия для печати

Написать ответ

Ваше имя (регистрация  E-mail 







Разрешается использование тегов форматирования текста:
<b>жирный</b> <i>наклонный</i> <u>подчеркнутый</u>,
а для выделения текста программ, используйте <code> ... </code>
и не забывайте закрывать теги! </b></i></u></code> :)


Наверх

  Рейтинг@Mail.ru     Титульная страница Поиск, карта сайта Написать письмо