在没有打印内存布局时,自认为函数内定义的局部变量布局是按照定义顺序分布的,但是经过gdb调试发现自认为的巨大错误。
定义一个函数
void testMem() {
int i = 0;
int v[3] = {0, 3, 10};
int vv[4] = {4, 2, 2, 6};
char d = 'c';
int16_t k = 2;
int j = 4;
int jj = 10;
char d2 = 'j';
}
在函数结束的大括号出加断点,运行程序。然后打印整型变量i和j的地址,打印字符变量d和d2的地址,如下
(gdb) p &i
$5 = (int *) 0x7fffffffd5e8
(gdb) p &j
$6 = (int *) 0x7fffffffd5ec
(gdb) p &jj
$7 = (int *) 0x7fffffffd5f0
(gdb) p &d
$1 = 0x7fffffffd5e4 "cj\002"
(gdb) p &d2
$2 = 0x7fffffffd5e5 "j\002"
(补充)
从打印结