有关指针反汇编中内存分配的问题
如题两个程序的反汇编,在指针内存存储方面如果有多个指针,嵌套叠加
第一层指针存储的地址反而最高
而 P7 需要多层解引用才能找到 p的值的指针反而距离p变量更近呢?
到底是为什么呢?
我来回答一下为什么p7和p的内存近,一个很重要的原因是取决于你的变量声明顺序,由于 int p = 10; 之后就紧接着 int *******p7; 了,所以它俩最近。
关于每个指针之间内存地址的差,这个可能和你的编译器有关,我用32位mingw的gcc 8.5跑出来的结果反汇编是这样的:
0x000615a6 <+6>: mov DWORD PTR ,0xa ; p
0x000615ad <+13>: lea eax,
0x000615b0 <+16>: mov DWORD PTR ,eax ; p1
0x000615b3 <+19>: lea eax,
0x000615b6 <+22>: mov DWORD PTR ,eax ; p2
0x000615b9 <+25>: lea eax,
0x000615bc <+28>: mov DWORD PTR ,eax ; p3
0x000615bf <+31>: lea eax,
0x000615c2 <+34>: mov DWORD PTR ,eax ; p4
0x000615c5 <+37>: lea eax,
0x000615c8 <+40>: mov DWORD PTR ,eax ; p5
0x000615cb <+43>: lea eax,
0x000615ce <+46>: mov DWORD PTR ,eax ; p6
0x000615d1 <+49>: lea eax,
0x000615d4 <+52>: mov DWORD PTR ,eax ; p7
可以看到每个指针都是挨着的。
而且细心观察可以发现内存排列的方式还有点不一样(p7在ebp-0x4而p在ebp-0x8)。
页:
[1]