谈谈内存的使用

基于MIPS处理器的系统通常将内存分为三部分,如下图所示:

内存布局

我们将第一部分,即图中起始于地址0x400000的内存空间称为正文段(代码段),用于存储程序指令。

第二部分是数据段,位于正文段上面,它又可以分成两部分。静态数据(起始地址为0x10000000)的大小为编译器所知,其内容在整个程序执行期间有效。例如在C语言中,全局变量是静态分配的,所以在程序执行的任意时刻都可以被引用。链接器不仅将静态目标分配到数据段中,同时也解决了各个子程序之间的引用关系。

静态数据段之上就是动态数据部分。顾名思义,动态数据是在程序的执行期间动态分配的。因为编译器无法准确预测程序所需的内存大小,运行时刻操作系统会扩大动态数据区域以满足程序执行的需要。如上图中的向上箭头所示,malloc通过系统调用sbrk实现动态扩展,令操作系统在紧接着动态数据段之上向程序(进程)的虚拟地址空间增加更多的页面(pages).

第三部分是程序的堆栈段。位于虚拟地址空间(起始地址为0x7fffffff)的顶部。堆栈跟动态数据段一样,程序所需要的最大堆栈空间也是无法预知的。当程序向堆栈段压入变量时,操作系统会自动向下(即数据段的方向)扩展堆栈段。

上述将内存划分为三部分的划分方法并不是唯一的。但不论如何划分,两个重要特征是不变的:两个动态可扩展的段尽可能分开,而且能够扩展到利用整个程序的地址空间。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值