Запрос на печать - PullRequest
       27

Запрос на печать

1 голос
/ 20 января 2011

когда мы печатаем адрес переменной, какой адрес печатается?

если это виртуальная память, то почему так?

Может кто-нибудь объяснить еще немного ...

Ответы [ 3 ]

5 голосов
/ 20 января 2011

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

Итак, если вы сделаете printf("%p", (void*)&variable);, он напечатает виртуальный адрес переменной для текущего процесса.

0 голосов
/ 20 января 2011

Адрес виртуальной памяти печатается, и это так, потому что вам не нужен физический адрес, и весь смысл ОС состоит в том, чтобы вам не приходилось иметь дело с физическими адресами (ну, это не только это, но это еще и то: D).

0 голосов
/ 20 января 2011

На обычном компьютере ПК это значение, которое вы получите, если вы конвертируете poitner в целое число того же размера.

void *p = something;
int i = *(int*)p;
printf("%x", i);

Адрес памяти виртуальный, да, конечно, потому что именно так процесс, выполняющий ваш код, обращается к памяти в вашем comupter. Процесс не может видеть физическую память.

...