Код: // VS2010
int a;
int b;
int c;
int d;
int main(){
//output the address of global variables
printf("0x%x, 0x%x, 0x%x, 0x%x\n", &a, &b, &c, &d);
int a1, b1, c1, d1;
//output the address of local variables
printf("0x%x, 0x%x, 0x%x, 0x%x\n", &a1, &b1, &c1, &d1);
int a2 = 1;
int b2 = 2; int c2; int d2 = 4;
//output the address of local variables
printf("0x%x, 0x%x, 0x%x, 0x%x\n", &a2, &b2, &c2, &d2);
}
Вывод:
0x1197a44, 0x1197a3c, 0x1197a40, 0x1197a38
0x15fb00, 0x15faf4, 0x15fae8, 0x15fadc
0x15fad0, 0x15fac4, 0x15fab8, 0x15faac
Мой вопрос:
Why are the global variables not stored in order
?Приведенный выше вывод означает, что они вышли из строя.
Why are the local varialbes not stored continuously
?Приведенный выше вывод означает, что VS2010 вставляет 8-байтовое пространство между каждыми двумя из них.
Кто-нибудь может мне помочь?Большое спасибо!
--------------------------------------- дополнение------------------------------------------
Код:\ gcc версия 4.6.1 (Ubuntu / Linaro 4.6.1-9ubuntu3)
int a;
int b;
int c;
int d;
void main(){
//output the address of global variables
printf("%p, %p, %p, %p\n", &a, &b, &c, &d);
int a1, b1, c1, d1;
//output the address of local variables
printf("%p, %p, %p, %p\n", &a1, &b1, &c1, &d1);
int a2 = 1;
int b2 = 2; int c2; int d2 = 4;
//output the address of local variables
printf("%p, %p, %p, %p\n", &a2, &b2, &c2, &d2);
}
Вывод:
0x60103c, 0x601034, 0x601038, 0x601030
0x7fff126253a0, 0x7fff126253a4, 0x7fff126253a8, 0x7fff126253ac
0x7fff126253b0, 0x7fff126253b4, 0x7fff126253b8, 0x7fff126253bc
В gcc - адрес глобальной переменной и локальной переменнойявляется непрерывным и в порядке.
Так что я хочу знать, что и почему vs2010 делает это для нашего кода.