虚拟内存我也只在网上的文章里看过是实在话我一直就.docVIP

虚拟内存我也只在网上的文章里看过是实在话我一直就.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
虚拟内存我也只在网上的文章里看过是实在话我一直就

?虚拟内存,我也只在网上的文章里看过,是实在话我一直就不清楚WIN平台下的虚拟内存开辟使用过程是如何的,但一点我是可以肯定的,无非是在硬盘上开辟一个空间来储存数据。换言之就是对文件进行操作。也许有朋友会说,这样的话我自己随便临时建立文件存储数据就可以了啊。我这里所提高的“虚拟内存”其实就开辟文件来储存数据,可为了方便使用,这里按照数组的使用习惯集成了一套方法,这样可以很好的管理自己开辟的数据。 ????说到这,也许有朋友会不以为然,觉得这不就一小儿科。的确,这样的小伎俩其实就是小儿科。但作为学习的一种手段,我也只是提出自己的看法与大家共同探讨而已。 ????记得以前给别人写的一个智能五子棋,DOS下是 9X10 的棋盘,内存就耗费的不小。我打算做个 100X100 或更大棋盘,那就只能自己去建立链表来管理内存了。而我就不想费那事,老早就打算使用文件来存储数据。当然这样一来速度必然会受影响,但我觉得值得一试,也算是一种开发性思维的培养吧。 ????一. 找寻数据 ????我们做这个文件操作的“虚拟内存”,最重要的就是要使其使用想数组那样,通过数组标号可以子好到任意一个数据。所以我们要做的就是指定这样的一些函数——只要输入“数组”标号,就可以在文件中找到恰当的位置读取或写入数据。那么,我们就得先温习一下真实的数组是怎么样找寻具体数据的。我们假设一个三维数组 buffer[10][11][12]。我们找到其实数组的元素在内存中是线性排列,那么 buffer[2][3][6] 应该是在第一个位置上呢?仔细计算一下,应该是 (2*11*12 + 3*12 + 6)对吧?所以归纳起来就是 buffer[n1][n2]...[nn] 的第 buffer[x1][x2]...[xn] 个元素的位置应该就是 (x1*n2*n3*...*nn + x2*n3*...*nn + ... + x(n-1)*nn + xn)。之所以要分析这个,是因为我们在文件中存储一个数组的元素一定是线性存储的,所以只有知道确定元素的算法才能准确的在文件中找到相应的位置。 ????二. 可变参数 ????由于我们要建立一套有数组使用风格的函数,其中对数组的创建就必须是有可选参数的。(即可让用户根据需要开辟N维数组,所以参数必须是可选的)其实也很简单,只要把参数传入为 ... ,其使用函数的时候就可以传如任意个参数。但值得注意的是 ... 默认为 int 型的,所以要注意其中的转换。 ????三. 函数简介 ????其实我做的这套函数包,也就只有4个函数而已,下面介绍一下。 ???? ????1. 创建函数 ????f_ms creat_ms(unsigned char count, long fist, ...);??????????/* 创建数组 */ ????count 为数组维数。fist 为第一维数。其后分别是第二,第三 ...... 第N维数。前面说了,由于 ... 是 int 型,取值范围 1 - 32767。也就是说如果开辟多维数组,那么从第二维开始以后的维数最大只能是 32767。此套函数最多能开辟 2147483648 个元素。因为 fist 为 long 型。也许朋友会说你不是无限数组吗?可什么东西都要有个界限啊。就这套函数开辟的一个数组就最大容量就是 2G 啊。够用了吧?此函数返回 f_ms 类型。 ????2. 赋值函数 ????int input_ms(f_ms memory, float input, long fist, ...);????????/* 写入数据,成功返回1 */ ????memory 为用户自己开辟的“虚拟内存”结构。input 为写入的数据。大家看到了 input 是 flaot 型的,就是为了能较全面兼容数据类型,这样在的出数据后由用户自行转化就OK啦。其后的就是要输入第几个元素。此函数相当于 buffer[x1][x2]....[xn] = y; ????3. 取值函数 ????float output_ms(f_ms memory, long fist, ...);????????????/* 取得数据,成功返回1 */ ????memory 为用户自己开辟的“虚拟内存”结构。其后的就是要输入第几个元素。可以看到与 赋值函数 向对应的 input,此函数的返回值即为 float 型。此函数相当于 y = buffer[x1][x2]....[xn]; ????4. 销毁函数 ????void destroy_ms(f_ms memory);????????????????????/* 销毁虚拟内存 */ ????很简单,其实就是删除开辟的文件。若不是可以保留,一定要在使用完虚拟内存后,销毁内存,比如磁盘空间会降低

文档评论(0)

zhuwo + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档