#include <stdio.h>
struct TestType
{
int _a;
int _b;
};
int main()
{
int a = 1;
struct TestType testa;
int b = 4;
testa._a = 2;
testa._b = 3;
int c1 = 5, c2 = 6, c3 = 7;
int d[10];
printf("a = %p,\n", &a);
printf("testa = %p,\n", &testa);
printf("b = %p,\n", &b);
printf("c1 = %p, c2 = %p, c3 = %p,\n", &c1, &c2, &c3);
printf("d[0] = %p, d[2] = %p\n", &d[0], &(d[2]));
return 0;
}
GDB调试结果如下:
这个结构体和int变量中间多了4字节的奇怪玩意儿,不晓得是神马鬼,然后调整了struct定义的位置,发现每次struct变量出现的位置总是在每16个字节的开始位置。比如说例子中的testa前面这样定义的话:
int a;
int b;
TestType testa;
那么testa的分布就会变成这样:
a = 0x7fff54ac4be8,
b = 0x7fff54ac4be4,
testa = 0x7fff54ac4bd0,
然后又去VS下测试了一下,发现windows下确实是高地址向低地址顺序生长的,但是VS下也有奇怪的现象,每个变量的开始和结束都会有4字节的cc值,不知道是干什么的。
这些应该都是编译器的设计,但是不太了解这样的意图,如果有高人知道以上两点,希望能给予指导,不胜感激!