2010-07-03 10 views
1

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

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

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

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

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

Per this странице «DeallocationStack» является: максимальный размер стека хранится в поле DeallocationStack

Может кто-то помочь мне понять мое замешательство?

+0

Не могли бы вы поделиться тем, что было на этой теме? :) Благодаря. – CaseyJones

+1

Параллельное программирование на Windows Джо Даффи. –

ответ

2

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

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

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