Где C ++ создает стек и кучу в памяти?

Я использую Microsoft Visual Studio 2008

Когда я создаю указатель на объект, он получает адрес памяти, который в моем случае представляет собой шестнадцатеричное число из 8 цифр. Например.: 0x02e97fc0

С помощью 8 шестнадцатеричных цифр компьютер может адресовать 4 ГБ памяти. На моем компьютере 8 ГБ памяти:

  1. Означает ли это, что моя среда IDE не использует более 4 ГБ памяти?

  2. Может ли IDE обрабатывать только первые 4 ГБ памяти или любые 4 ГБ из 8 не используемых?

Вопрос не только в размере используемой памяти. Это также касается расположения используемой памяти. Последние не были подробно описаны здесь: Максимальный объем памяти, который может адресовать любой отдельный процесс в Windows

1

Решение

Где C ++ создает стек и кучу в памяти?

Ну, C ++ на самом деле не обрабатывает память, он просит операционную систему сделать это. Когда ваш двоичный объект (.exe, .dll, .so …) загружается в память, это ОС, которая выделяет память для стека. Когда вы динамически распределяете память с newвы запрашиваете у ОС место в куче.

1) Означает ли это, что моя среда IDE не использует более 4 ГБ памяти?

Нет, не совсем. На самом деле современные ОС, такие как Windows, используют то, что называется виртуальное адресное пространство. Он отображает, по-видимому, непрерывный сегмент памяти (скажем, 0x1000 в 0xffff) к сегменту виртуальный пространство только для вашей программы; у вас нет абсолютно никаких гарантий относительно того, где ваши объекты действительно находятся в памяти. Когда адрес разыменовывается, операционная система выполняет некоторые действия и позволяет вашей программе получить доступ к физическому адресу в памяти.

Диаграмма взаимосвязи между виртуальным и физическим адресными пространствами.

Наличие 32-битных адресов означает, что один экземпляр вашей программы не может использовать более 4 ГБ памяти. Два экземпляра одной и той же программы могут, так как ОС может выделить два разных сегмента физического адреса внутри явно одного и того же сегмента виртуального адреса (0x00000000 в 0xffffffff). И Windows выделит еще больше перекрывающихся адресных пространств для своих собственных процессов.

2) Может ли IDE адресовать только первые 4 ГБ памяти или любые 4 ГБ из 8 не используемых?

Любой. Даже несмежная память, даже дисковая память … никто не может сказать.

В комментариях об этом нашел какой-то источник Microsoft: https://msdn.microsoft.com/en-us/library/aa366778.aspx

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]