Какой тип памяти выделяет VirtualAlloc / Ex - PullRequest
0 голосов
/ 24 мая 2018

Я знаю, что программы в стиле C / C ++ имеют разделы памяти, стек, кучу, .text и т. Д. Но когда я использую VirtualAlloc, откуда он выделяет память?Я не думаю, что это куча, потому что я могу просто использовать HeapAlloc.

Совет был бы оценен!

Ответы [ 2 ]

0 голосов
/ 25 мая 2018

Это не правильно:

Я знаю, что программы в стиле C / C ++ имеют разделы памяти, стек, кучу, .text и т. Д.

Такие разделывыход только через соединение в системе и через загрузку в других системах.Разделы в этом контексте говорят только о том, как части приложения должны быть сгруппированы в памяти.Когда ваша программа запускается, она просто имеет память.

Функция, подобная VirtualAlloc, просто выделяет страницы процессу.

0 голосов
/ 24 мая 2018

Куча памяти находится в виртуальной памяти ваших программ, которая выделяется VirtualAlloc за кулисамиОднако проблема заключается в том, что VirtualAlloc выделяет память только большими кусками, называемыми страницами, что делает невозможным использование для общего выделения памяти.

По этой причине существует HeapAlloc, который управляет выделенными страницами и может объединять несколько размещений в одну страницу, чтобы вам не пришлось без необходимости выделять целую страницу (обычно 4 КБ, но это не правило) для каждого небольшого выделения.

...