虚拟地址空间划分
以32位linux进程为例
当进程被操作系统加载时,操作系统会给该进程提供一块 0x00000000~0xFFFFFFFF 共4G大小的虚拟内存地址空间
- 0x00000000~0xFFFFFFFF
- 0x00000000~0xC0000000 : 用户空间
- 0x00000000~0x08048000 : 预留空间(不允许访问)
- .text .rodata : 代码段和只读数据区
- .data : 数据段,存储已初始化且不为0的变量
- .bss : 未初始化+已初始化为0的变量
- .heap : 堆区
- 共享库 : 加载.so的地方
- .stack: 栈区
- : 命令行参数和环境变量
- 0xC0000000~0xFFFFFFFF : 内核空间
- 0x00000000~0xC0000000 : 用户空间
1 | int gdata1 = 10; |
其中 gdata1 gdata4 e 存储在.data
gdata2 gdata3 gdata5 gdata6 f g 存储在.bss
a b c 为指令存储在.text, 运行时申请内存在.stack
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 ciiki的博客!
评论




