У меня есть простой код следующим образом:
#include<stdio.h>
int glob;
int main(void)
{
int a;
printf("&a is : %p \n", &a);
printf("glob is : %p \n", &glob);
return 0;
}
Вывод вышеуказанной программы: Первый запуск:
&a is : 0x7fff70de91ec
glob is : 0x6008f4
Второй запуск:
&a is : 0x7fff38c4c7ac
glob is : 0x6008f4
Я изучаю виртуальные и физические адреса. У меня следующий вопрос:
- Какой напечатанный адрес (физический/виртуальный) переменной "a"?
- Если он виртуальный, то как он меняется при каждом запуске одной и той же программы? Как я понял, компилятор предоставляет виртуальный адрес переменным во время компиляции?
- Почему адрес глобальной переменной постоянен при каждом запуске программы?
Выполнил эту программу в Linux: 2.6.18-308.el5 x86_64 GNU/Linux
Скомпилировано с использованием: gcc версии 4.1.2 20080704 (Red Hat 4.1.2-52)
%p
должен быть указан указатель на пустоту, поэтому вы должны привести к(void*)
в обоих printfs. - person Jens   schedule 05.04.2013void *
? - person Vilhelm Gray   schedule 05.04.2013