c++:变量在内存上的分布

2 篇文章 0 订阅

        在操作系统上,进程被存进虚拟内存(虚拟地址空间)中,其中一部分是user space(用户空间;私有),另一部分为kernel space(公有空间/内核空间)。虚拟内存会根据操作系统的位数来决定大小,如果是32位操作系统,那么它的大小就为2的32次方,即4G,如果是64位操作系统,就是8G.本文将分析32位操作系统。

       在32位操作系统上,内存为4G,其中3G被指定为私有虚拟地址空间,1G被指定为共有空间,具体如下图:


其中reserve区不能读也不能写不能被访问

.text为代码段:存放一些指令

.data和.bss为数据段:其中初始值不为0的静态局部变量,全局变量,静态全局变量存入其中;初始值为0或未初始化的静态局部变量,静态全局变量,全局变量存入其中。(程序开始时创建,程序结束时销毁)

heap:为堆内存,通常经过malloc或者new所申请的空间为堆内存,数据也就存入此中。(delete或free时收回)

共享库内存:存放的是一些 lib文件

stack:栈内存,存放一些局部变量(进入函数时创建,出函数时销毁)

当程序编译完成时,可执行文件由指令和数据构成。

问题????

为什么指令要与数据分开存储???

原因有三:

1:内存上的指令数据(可执行文件)---->(映射)到高速缓存中去,在高速缓存中指令和数据也是分开的,文件映射到高速缓存可以高效的执行

2:所有的一样的程序的指令都是一样的就像登QQ时一样,但是数据段不一样,就像写消息一样,所以共享代码段可以节省内存。

3:指令都是只读不能写的而数据段是可读可写的。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值