编译的C程序中的内存地址?

时间:2019-07-24 11:34:57

标签: memory compilation virtual-memory

考虑这个玩具C代码,

#include <stdio.h>

int main()
{
    int i;
    for(i=0; i < 10; i++)
    {
        printf("Hello, world!\n");
    }
}

当您使用gcc进行编译时,然后使用objdump检查生成的.out文件,您将得到类似以下的内容:

08048374 <main>:
8048374:       55                      push   ebp
8048375:       89 e5                   mov    ebp,esp
8048377:       83 ec 08                sub    esp,0x8
804837a:       83 e4 f0                and    esp,0xfffffff0
804837d:       b8 00 00 00 00          mov    eax,0x0
8048382:       29 c4                   sub    esp,eax
8048384:       c7 45 fc 00 00 00 00    mov    DWORD PTR [ebp-4],0x0
804838b:       83 7d fc 09             cmp    DWORD PTR [ebp-4],0x9
804838f:       7e 02                   jle    8048393 <main+0x1f>
8048391:       eb 13                   jmp    80483a6 <main+0x32>
8048393:       c7 04 24 84 84 04 08    mov    DWORD PTR [esp],0x8048484
804839a:       e8 01 ff ff ff          call   80482a0 <printf@plt>
804839f:       8d 45 fc                lea    eax,[ebp-4]
80483a2:       ff 00                   inc    DWORD PTR [eax]
80483a4:       eb e5                   jmp    804838b <main+0x17>
80483a6:       c9                      leave  
80483a7:       c3                      ret    
80483a8:       90                      nop    
80483a9:       90                      nop    
80483aa:       90                      nop    

我试图了解左侧的内存地址是什么意思? 据我了解,这只是一个可执行文件,为什么我们甚至在将程序加载到主存储器之前就进行存储器寻址?

为什么编译器与内存地址有关?当我们尝试将程序加载到ram中时,内存应该发挥作用。

为什么在尝试将程序加载到内存之前就分配了内存地址?

0 个答案:

没有答案