Разница между физической и виртуальной памятью визуально С++?

Я пытаюсь написать собственный менеджер памяти, и сейчас я выделяю глобальный массив байтов, например:

char g_retail_memory[512*MB];

Когда я затем заглядываю в монитор ресурсов Windows 7, он сообщает, что выделено около 512 МБ виртуальной памяти. кто-нибудь может объяснить, почему я не получаю физическую память? Если вместо этого я использую malloc(), я получаю физическую память. Я делаю что-то неправильно? В таком случае, есть ли правильный способ получить физическую память под Visual C++?


person abbec    schedule 19.03.2011    source источник
comment
как вы определяете, что получаете физическую память с помощью malloc?   -  person Mat    schedule 19.03.2011
comment
точно так же определяю не получаю... :) через диспетчер ресурсов винды но как я узнал в следующем посте эта информация может быть неверной :)   -  person abbec    schedule 19.03.2011


Ответы (1)


См. http://en.wikipedia.org/wiki/Virtual_memory.

Вся выделяемая вами физическая память также будет виртуальной памятью, потому что виртуальная машина — это способ, которым система предоставляет память приложениям в современных операционных системах. Причина, по которой вы можете не видеть, что некоторые выделения отображаются как физические, может заключаться в том, что память никогда не использовалась, поэтому ОС на самом деле не нужно было находить для нее физическую память, но она будет, когда / если память используется впервые.

Обратите внимание, что резервная физическая память виртуальной памяти может позже «уйти», если ОС понадобится для другого приложения. Это иногда называют «обменом» или «пейджингом».

person John Zwinck    schedule 19.03.2011
comment
Ах хорошо! Я понимаю. Так что я делаю правильно для предварительного выделения памяти? - person abbec; 19.03.2011
comment
Если бы это был я, я бы использовал malloc, просто потому, что запросить 512 МБ в таком массиве — это много, и у системы нет возможности сообщить о сбое в выделении, кроме как завершить вашу программу. Принимая во внимание, что с malloc вы могли бы, по крайней мере, обнаружить, что большое предварительное выделение не удалось (когда malloc возвращает NULL). - person John Zwinck; 19.03.2011
comment
Хорошо... Я использую архитектуру игрового движка Джейсона Грегори в качестве ссылки, где он говорит, что глобальный массив байтов эффективно выделяется из сегмента исполняемых файлов BBS. Но я согласен с вами, будет трудно обнаружить ошибки... - person abbec; 19.03.2011
comment
Это будет BSS, а не BBS. :) - person John Zwinck; 20.03.2011
comment
:) теперь я решил все проблемы, выделив память с помощью win32, если кому-то интересно. - person abbec; 21.03.2011