计算机的内存管理程序的内存模型

内存管理技术

虚拟内存管理技术中最常见的就是依靠硬件实现的分页技术(MMU,现代MMU一般被集成在CPU内部)。

在这里插入图片描述
如果CPU在访问某个虚拟页时,发现该虚拟页所对应的物理页没有被加载进入内存。就会触发一个缺页异常(page fault)。
在这里插入图片描述

程序的内容模型

(1)代码段
(2)只读数据段(rodata)
(3)已初始化的读写数据段(data)
(4)未初始化的数据段(BSS)
在程序一开始时会将所有的清零
(5)堆
(6)栈

int a = 0; //全局初始化区。        data段
static int b=20; //全局初始化区。  data段
char *p1; //全局未初始化区         bss段
const int A = 10; //             rodata段
void main(void{
	int b; //栈
	char s[] = "abc"; //栈
	char *p2; //栈
	static int c = 0; //全局(静态)初始化区 .data段
	char *p3 = "123456"; //123456\0在常量区,p3 在栈上。
	p1 =char*) malloc(10);//分配得来的10和20个字节的区域就在堆区
	p2 =char*) malloc(20);
	strcpy(p1, "123456"); //123456\0 在常量区,编译器可能会将它与p3所指向的"123456"优化成一个地方
 }

编译和运行时内存模型如下:
这里写图片描述
注意,上图中.out文件中只存储了BSS段的大小。并没有实际留出空间
这里写图片描述
在程序装载近内存时,对BSS段清零。
对于32位系统
在这里插入图片描述
对于64位系统
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值