虚拟地址空间

本文深入解析了进程在创建时,操作系统为其分配的4G大小地址空间的详细布局,包括用户空间与内核空间的划分,以及.text、.data、.bss、Heap、Memory Mapping Segment和Stack各段的功能与特点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在进程创建的时候,操作系统会为之分配4G大小的地址空间(32位的CPU的寻址空间是4G)。4G虚拟地址空间,分为两部分:用户空间和内核空间(Linux:3/1; windows:2/2)。以Linux为例,如图,3G的用户空间(User Space)、1G的内核空间。

保留区(128m)的空间是不允许访问的,意在防止操作干扰和页的加载约定。

.text段(指令代码段):存放的是程序指令(函数的入口地址)。

.date段(数据段):程序已初始化的全局变量、静态变量。只读数据:字符串常量,const修饰的变量。

.bss段(数据段):保存未经初始化的全局变量、静态变量以及初始化为0的全局变量、静态变量。

.Heap段(堆区):动态内存开辟区(malloc()/new、free()/delete)。

Memory Mapping Segment(共享库区):堆区和栈区之间的映射空间,用到共享库的时候会在该区域生成库的副本。

.Stack段(栈区):函数栈争、形参、局部变量的开辟。

栈区后面存储命令行形参数和环境变量。

.text段、.Heap段、.Stack段的起始位置不固定,有一定的偏移,为了防止程序的恶意修改、栈的溢出。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值