Это не совсем ясно из вашего вопроса или изображения, но под «Системным адресным пространством» вы, вероятно, подразумеваете область между 2ГБ-4ГБ.Это действительно занимает половину теоретического пространства 4 ГБ, но для этого есть веская причина.
Обычно с 32-битами вы можете адресовать 4 ГБ памяти (2 ^ 32 = 4294967296), поэтому это будет выглядеть логичноиметь 4 ГБ адресного пространства, а не 2 ГБ.Причина этого заключается в следующем: Предположим, у вас есть 2 указателя, например, в C / C ++:
char *ptr1;
char *ptr2;
Теперь я хочу узнать, в чем разница между двумя указателями, например:
offset = ptr2 - ptr1;
Каким должен быть тип данных «смещение»?Если мы не знаем, стоит ли ptr1 перед ptr2 или наоборот, смещение может быть положительным или отрицательным.Теперь, если оба значения ptr1 или ptr2 находятся в диапазоне от 0 до 2 ГБ, тогда смещение всегда находится в диапазоне от -2147483648 до +2147483647, что точно соответствует 4-байтовому целому числу со знаком.
Однако, если бы ptr1 и ptr2 были бывозможность доступа к полному адресному пространству 4 ГБ, смещение будет между -4294967296 и +4294967295, которое больше не вписывается в 4-байтовое целое число со знаком.
Если вы уверены, что никогда не выполняете такого родавычисления в вашем приложении, или вы уверены, что если вы вычли 2 указателя, что они никогда не будут больше, чем 2 ГБ (или ваши векторы всегда меньше 2 ГБ), вы можете сказать компоновщику (Windows, Visual Studio), что вашПриложение LARGEADDRESSAWARE.Этот флаг компоновщика устанавливает бит в исполняемом файле, и если 32-битная Windows загружается правильно (в XP вы должны были загружаться с флагом / 3GB), Windows предоставила вам 3 ГБ вместо 2 ГБ (только для исполняемых файлов LARGEADDRESSAWARE).Оставшиеся 1 ГБ все еще используются для структур данных операционной системы (но у меня нет подробностей о них).
Если вы используете 64-разрядную версию Windows, то все становится еще интереснее, потому что исполняемые файлы LARGEADDRESSAWARE получат4 ГБ памяти.По-видимому, структуры данных операционной системы теперь хранятся где-то в 64-битном адресном пространстве, за пределами 4 ГБ, используемых приложением.
Надеюсь, это немного прояснит.