Функции компилятора для контроля стека.

В случае DOS при компиляции программ нужно было включать дополнительный программный код для конроля размера стека. В Windows 95, 98, NT этой проблемы нет, но возникает проблема контроля за выделением страниц физической памяти. Например,

VOID SomeFunc(…)

{

int Values[4000];

Values[0]=0;

}

переменная локальная

Физическая память   Физическая память   Зарезервированная страница Зарезервированная страница

 


четыре страницы

 

 

При создании стека резервируется 16000 байт. Физическая память выделена только двум страницам, поэтому при компиляции программы вставляется дополнительный код. Этот дополнительный код работает по следующему алгоритму:

 

 


nByteNeeded = nByteNeeded – размер страницы
ОС выделяет физическую память
Запись на страницу
Указатель стека смещается на страницу вниз
Выход
nByteNeeded > размера страницы
Определение положения указателя стека
Определение размера страницы

 

Ф.С.   Ф.С.   Ф.С.

 


9. Кучи в Windows NT (2000). Структура кучи в Win32. Функции управления кучей Win32.