Вы не удаляете вещи, которые размещены в стеке; он автоматически восстанавливается, поскольку при выходе из текущей области указатель стека перемещается обратно в предыдущий кадр стека 1 , поэтому вся память, используемая для объектов в текущей области, эффективно восстанавливается.
В принципе, весь стек выделяется, когда приложение загружается в память, поэтому это структура фиксированного размера, которая многократно используется снова и снова (в то время как поток кода входит и выходит из области видимости); ОС может выполнять хитрые трюки (используя защитные страницы для фиксации верхних частей стека, которые были зарезервированы при запуске приложения), но в целом это не должно вас беспокоить.
Размер стека является частью PE-заголовка (заголовка вашего исполняемого файла), и вы можете установить его с помощью опции компоновщика. Вы можете получить такое значение для загруженного исполняемого файла, отслеживая PE-структуры, загруженные в память (в основном его HMODULE
- это место, где исполняемый файл отображается в памяти); Я думаю, что библиотека ImageHelper может быть полезна в этой задаче.
<ч />
- Естественно, после запуска деструкторов; Кстати, FPO может немного изменить ситуацию, но концепция остается прежней.
<ч />
Редактировать
Другими словами, если я вручную получу доступ к памяти до этого 1 МБ, может ли Windows выдать нарушение прав доступа?
Если оно уже было зафиксировано (т. Е. Вы выделили и освободили 1 МБ объектов в стеке), я не думаю, что это может произойти.
Windows не может понять, что эта часть стека больше не используется. Windows может определить, нужно ли фиксировать больше страниц, используя защитные страницы для обнаружения доступа к верхней части стека, но она не может знать, что эти страницы больше не используются.
На самом деле он мог бы искать указатель стека при переключении контекста, но он сломал бы приложения, которые делают «умные» вещи со стеком, и в целом это была бы оптимизация, которая не стоила бы усилий: если бы не было памяти эти страницы все еще могут быть выгружены.
Тем не менее, чтобы не рисковать (например, если вы не знаете, произошло ли это распределение), вы должны прочитать стек, начиная с текущего используемого раздела вверх, так что если страницы вверх еще не зафиксированы, вы бы по-прежнему прикасайтесь к странице защиты, предупреждая Windows о выделении дополнительных страниц для стека.