C++语言的存储管理

1、用户对控制存储的需要

C++语言为在自由存储区上分配和释放存储,分别提供了new和delete运算符。满足用户对于细粒度存储分配和释放的需要。

通常,需要用户自己控制存储的场景有以下几种:

(1)为某些频繁使用的类建立一个类分配器。如对某些类,大量的建立或删除小对象,典型的情况是树节点、链表节点、点、消息等类的对象。通用的存储分配机制开销较大,而且不同大小的对象混合会造成碎片的增加。

(2)对于资源紧张而且需要长时间运行而不能中断的程序。

(3)实时系统,通常要求有保证并且可预期的存储分配。

(4)某些大型而复杂的C++系统......

2、C++提供的存储管理的机制

(1)存储分配和初始化的分离

    new运算符保证分离的存储分配和初始化一起使用,编译系统产生的代码,会完成存储空间的分配,然后调用构造函数进行初始化。

(2)new/delete与new []/delete []配对使用。

(3)虚析构函数,使得基类指针指向的派生类的对象能够被正确delete而释放。

(4)set_new_handler,用户自己提供函数来处理内存耗尽情况。用户可以在这个函数里,尝试寻找其他自由存储资源,也可以返回报错信息。实现内存耗尽时用户对程序的控制。

3、关于垃圾回收机制

C++的设计者认为,垃圾回收机制会带来严重的空间和事件开销,以及增加实现和移植这一机制的复杂性。因此垃圾回收有用户来自己处理。

垃圾回收带来的好处和坏处分别如下。

好处:

(1)方便易于使用。

(2)对一些应用而言,自动的垃圾回收机制比程序员提供的存储管理机制要可靠。

坏处:

(1)时间和空间的开销。

(2)垃圾回收技术常常意味着服务的中断,对于一些实时程序、设备驱动程序、较慢的硬件上运行的人机界面代码、操作系统核心等无法接受。

(3)垃圾回收方案通常有对象布局和对象创建的限制。

(4)有些垃圾回收方案需要禁止一些C机制,譬如指针、不加检查的数组访问、不加检查的参数等。

注:以上总结自《C++语言的设计和演化》一书。

 

 

一. 实验目的: 1.通过编写调试存储管理的模拟程序以加深对存储管理方案的理解。熟悉虚存管理的各种页面淘汰算法 2.通过编写调试地址转换过程的模拟程序以加强对地址转换过程的了解。 二.实验要求 实验程序由以下三大部分组成: (1) 通过随机数产生一个指令序列(实际上是指令的逻辑地址序列),共320条指令。指令的地址按下述原则生成: A:50%的指令是顺序执行的 B:25%的指令要实现向前跳转,均匀分布在前地址部分 C:25%的指令要实现向后跳转,均匀分布在后地址部分 具体的实施方法是: A:在[0,319]的指令地址之间随机选取一起点m B:顺序执行一条指令,即执行地址为m+1的指令 C:在前地址[0,m+1]中随机选取一条指令并执行,该指令的地址为m’ D:顺序执行一条指令,其地址为m’+1 E:在后地址[m’+2,319]中随机选取一条指令并执行 F:重复步骤A-E,直到320次指令 (2) 将每条指令的逻辑地址变换为页地址 设:页面大小为1K; 用户内存容量4页到32页; 用户虚存容量为32K。 在用户虚存中,按每K存放10条指令排列虚存地址,即320条指令在虚存中的存放方式为: 第 0 条-第 9 条指令为第0页(对应逻辑地址为[0,9]) 第10条-第19条指令为第1页(对应逻辑地址为[10,19]) ……………………………… 第310条-第319条指令为第31页(对应逻辑地址为[310,319]) 按以上方式,用户指令可组成32页。 (3) 分别使用FIFO算法LFU算法,计算给用户进程的这32页分配4,5,…,32个页面(内存块)时其缺页率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值