叫我莫言 发表于 2023-4-3 19:04

有关指针反汇编中内存分配的问题








如题两个程序的反汇编,在指针内存存储方面如果有多个指针,嵌套叠加


第一层指针存储的地址反而最高


而 P7 需要多层解引用才能找到 p的值的指针反而距离p变量更近呢?

到底是为什么呢?

DEATHTOUCH 发表于 2023-4-3 21:21

我来回答一下为什么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]
查看完整版本: 有关指针反汇编中内存分配的问题