C++中的存储技术

/*
 *C++中的存储技术
 *我们来讨论C++的存储技术包括C++的存储类型,C++存取修饰符和C++对象的生存期三部分
 *C++存储类型
 *主要有三种类型:
 *extern存储,static存储,regsiter存储类型
 *1.extern存储类型
 *由于C语言允许将分别编译的大程序的各个模块连接在一起,以提高编译速度,协作大项目管理
 *因此必须将程序需要的所有的全局变量通过某种方法告知所有的文件。
 *解决以上问题的方法是:在一个文件中说明所有的全局变量,在另一个文件中使用extern再次
 *描述他们。当在函数内部使用同一个全局变量。而它又在同一个文件内说明时,可以选用extern
 *但一般很少这么做,在C++面向对象编程中,这种方法已经基本不再使用了,而只是在C语言的源代码
 *中经常还可以看见这种方法的身影。
 *2.static存储类型
 *静态变量不论在函数中或在文件中都是稳定的变量。静态局部变量可以使编译程序产生于全局变量
 *相同的永久性存储区,其差异是静态局部变量仅对于说明它的模块内可知。
 *静态局部变量对于生成C语言的独立函数时非常重要的,因为有时候有些子程序必须在调用时保留区值
 *例如:过去的数字为基数产生一个新值得数值序列发生器,如下程序:
 *int series(void)
 *{
 *  static int series_num;
 *  series_num += 2;
 *  return (series_num);
 *}
 *用户可以给静态局部变量赋初值,这个值仅制定一次,如下程序:
 *int series(void)
 *{
 *  static int series_num = 100;
 *  series_num += 23;
 *  return (series_num);
 *}
 *将分类型static用于全局变量,会使编译程序建立起仅在说明该全局变量的文件中可以认知的全局。
 *因此,在静态局部变量不能满足要求的场合,就可以将需要使用静态全局变量的函数写成一个小文件
 *进行单独编译而不必担心副作用。
 *静态变量允许程序员能将程序的以部分隐藏起来,这对于管理一个很大很复杂的程序非常有效。
 *存储类型static可以使程序员写出十分通用的函数,这些函数可以放入库中以备后用。
 *3.regsiter存储类型
 *这种存储类型仅仅用于int 和char类型变量。通常,regsiter要求编译程序将它说明的变量值保存起来
 *保存在CPU的寄存器中,这样其运算速度就会大大快于普通的变量。
 *regsiter仅可以用于局部变量和函数的形式参数,因为这些变量和字符存储在CPU的寄存器中,都是缺省的自动变量
 *由于regsiter可以提高速度,因此它是最理想的循环控制变量。但是在实际应用中,由于同一时刻获取优化速度的regsiter
 *变量有限。
 *
*/
/*
 *C++的存取修饰符
 *主要有:const--常数型,volatile--暂态型
 *1.const--常数型
 *const型变量在程序执行期间是不可以改变的,编译程序可以随意的将这些变量放到只读存储器Rom中
 *const用途:可以阻止参数被修改,即当一个指针传送给一个函数后,函数可能修改该指针所指向的变量,然而,如果指针在参数说明段
 *用const修饰,函数就无法修改指针所指的内容了。
 *通常,当一个标准库函数不必修改调用参数指引的对象时,参数则用const来修饰,
 *2.volatile
 *volatile通知编译器:变量值可能由程序中没有显示说明的方式所改变。
 *全局变量的地址可能被传递到操作系统的时针子程序,用来保存系统实时时间。
 *引用修饰符volatile的原因:大多数C编译程序都假定表达式内部的内容不变,并以这一假定来自动优化某些表达式。
 *有些编译程序都假定表达式内部的内容不变,并以这一假定来自动优化某些表达式。有些编译程序在编译时还有改变表达式的计算顺序,volatile
 *可以防止这些改变发生。
 *const 和volatile可以一起使用,例如:如果假定0x80是仅由外部条件改变的端口的值,那么下面说明既可以消除用户希望防止的说有偶发副作用:
 *const volatile unsigned char * port=0x80;
*/

一. 实验目的: 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个页面(内存块)时其缺页率。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值