2014-02-16 2 views
-1

Просьба пояснить разницу между виртуальными и физическими адресами на следующем примере. Пожалуйста, объясните, какой адрес конкретно используется здесь и как использовать другой адрес в одном месте. Также, как можно различать два.Разница между виртуальным адресом и физическим адресом?

код:

if(fork()==0) 
{ 
    a=a+5; 
    printf("%d%d", a, &a); 
} 
else 
{ 
    a=a-5; 
    printf("%d%d", a, &a); 
} 

Какой адрес делает &a см в обоих заявлениях?

ответ

0

& a может ссылаться на два разных адреса, если вы объявляете переменную a независимо, если & блоков else.

Но если переменная a объявлена ​​выше «если», то в любом случае переменная «a» будет иметь тот же физический адрес, к которому можно получить доступ: & a.

Когда вы добавляете или вычитаете значения из «a», вы изменяете содержимое, хранящееся в памяти, где хранится «a», означает значение a, а не адрес.

В этом случае вы не изменяете адрес a, так как это физический адрес.

Если вы действительно хотите, чтобы играть с адресом, то есть указатель, ссылающийся на как

*p = &a; 
p+=5; 
p-=5; 

Таким образом, вы можете пойти пять блоков памяти вперед & назад (один размер блока зависит от типа переменной «а ") в памяти.

Более подробную информацию о виртуальном адресе: refer here

Надежда, что помогает.

+0

За исключением комментария, что это физический адрес, я согласен с тем, что написано здесь. Только самые низкие значения ядра работают с физическими адресами. Весь другой код работает с виртуальными адресами. В частности, пользовательские программы в таких системах, как Unix, работают только с виртуальными адресами, а ядро ​​управляет отображением с виртуальных на физические адреса, а MMU обрабатывает это сопоставление. По существу нет способа определить физический адрес, соответствующий виртуальному адресу из кода пользователя. –

Смежные вопросы