Стек и базовый адрес стека - PullRequest
1 голос
/ 03 июля 2010

В структуре MEMORY_BASIC_INFORMATION находятся две переменные PVOID, которые называются BaseAddress и AllocationBase соответственно.

Я читаю книгу о потоках и рассказываю, как ее получитьстековое пространство осталось в стеке довольно подробно, однако есть кое-что, что я не уверен, что правильно понял.

BaseAddress в структуре, упомянутой выше, указывает на самый высокий адрес в текущем стеке потока илисамый низкий адрес?Поскольку стек растет вниз, самое низкое будет сверху, а самое высокое снизу.

В чем разница между полями AllocationBase и BaseAddress?Я не нахожу документацию MSDN очень пояснительной, поэтому я надеюсь, что кто-то может уточнить немного?

В моей книге также сказано, что адрес 'AllocationBase' совпадает с полем 'DeallocationStack'в структуре TEB, которая, как он говорит, указывает на конец стека, который, как я думал, был самым высоким адресом, тем не менее, поскольку его BASE, я предполагаю, что это должен быть самый низкий адрес, так как стек растет вниз.Так что я в некотором замешательстве относительно того, что к чему?

На этой странице, DeallocationStack: «Максимальный размер стека хранится в поле DeallocationStack

Можеткто-нибудь, помогите мне понять мое замешательство?

1 Ответ

2 голосов
/ 05 июля 2010

В MEMORY_BASIC_INFORMATION структура:

  • BaseAddress - адрес запрашиваемой страницы памяти (VirtualQuery (LPCVOID lpAddress , ...).
  • AllocationBase - начало выделенного блока памяти. Используется для освобождения. BaseAddress> = AllocationBase.

Если вы запрашиваете стек, то AllocationBase будет самым низким адресом стека (вершина стека).

...