内存分布
32 位系统有 4GB 的地址空间,其中 0x08048000
~ 0xbfffffff
是用户空间(3GB),0xc0000000
~ 0xffffffff
是内核空间(1GB)。(0x00000000
~ 0x08048000
有 128M。为什么是0x00000000
而不是0x00000000
为起始?)
栈
栈帧
栈帧(Stack Frame,也称堆栈帧)是在堆栈中为未运行完的函数分配的内存区域,用于保存调用这些函数所需维护的信息。
在 x86 体系中,寄存器ebp
指向堆栈帧的底部,esp
指向堆栈帧的顶部。栈由高地址向低地址生长。
在 Linux 环境下,ELF 文件的入口其实是_start
而非main()
。
堆
- 堆是除了存放栈中东西之外的所有其他内存区域,由动态内存分配器负责维护。
- 堆由低地址向高地址生长