Почему адрес виртуальной памяти одинаков в разных процессах? - PullRequest
4 голосов
/ 09 февраля 2012

http://i.stack.imgur.com/RGMsz.png

Я знаю, что виртуальная память разделяет 2G (для ядра) / 2G (для пользователя) в Windows. Но почему адрес переменной не является непрерывным стеком?

Нравится 0x22ff74,0x22ff78,0x22ff82,0x22ff86? Означает ли это, что Windows использует механизм песочницы в пользовательском процессе?

Ответы [ 3 ]

14 голосов
/ 09 февраля 2012

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

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

Подробнее о виртуальной памяти здесь .

3 голосов
/ 09 февраля 2012

Вы путаете физические адреса и виртуальные адреса? Два процесса могут обращаться к одному и тому же виртуальному адресу, потому что каждый процесс видит свое собственное пространство виртуальной памяти. С другой стороны, все процессы разделяют одно и то же пространство физической памяти на машине, поэтому каждому процессу будет сопоставляться один и тот же виртуальный адрес с другим физическим адресом (при условии, что общей памяти нет).

0 голосов
/ 09 февраля 2012

Позвольте мне объяснить это по-другому. Процесс X выполняется на компьютере A, и та же программа выполняется на компьютере B как процесс Y. Имеет ли значение, если какая-то глобальная переменная вашей программы занимает один и тот же адрес памяти на обеих машинах? Они разные! Таким же образом, если эта глобальная переменная хранится в местоположении XYZ для одного экземпляра процесса, другой экземпляр процесса может иметь такой же виртуальный адрес (XYZ) для этой глобальной переменной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...