我来回答一下为什么p7和p的内存近,一个很重要的原因是取决于你的变量声明顺序,由于 int p = 10; 之后就紧接着 int *******p7; 了,所以它俩最近。
关于每个指针之间内存地址的差,这个可能和你的编译器有关,我用32位mingw的gcc 8.5跑出来的结果反汇编是这样的:
[Asm] 纯文本查看 复制代码
0x000615a6 <+6>: mov DWORD PTR [ebp-0x8],0xa ; p
0x000615ad <+13>: lea eax,[ebp-0x8]
0x000615b0 <+16>: mov DWORD PTR [ebp-0x20],eax ; p1
0x000615b3 <+19>: lea eax,[ebp-0x20]
0x000615b6 <+22>: mov DWORD PTR [ebp-0x1c],eax ; p2
0x000615b9 <+25>: lea eax,[ebp-0x1c]
0x000615bc <+28>: mov DWORD PTR [ebp-0x18],eax ; p3
0x000615bf <+31>: lea eax,[ebp-0x18]
0x000615c2 <+34>: mov DWORD PTR [ebp-0x14],eax ; p4
0x000615c5 <+37>: lea eax,[ebp-0x14]
0x000615c8 <+40>: mov DWORD PTR [ebp-0x10],eax ; p5
0x000615cb <+43>: lea eax,[ebp-0x10]
0x000615ce <+46>: mov DWORD PTR [ebp-0xc],eax ; p6
0x000615d1 <+49>: lea eax,[ebp-0xc]
0x000615d4 <+52>: mov DWORD PTR [ebp-0x4],eax ; p7
可以看到每个指针都是挨着的。
而且细心观察可以发现内存排列的方式还有点不一样(p7在ebp-0x4而p在ebp-0x8)。 |