大型3D场景漫游系统内存管理.docxVIP

  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文档。上传文档
查看更多
PAGE 1 PAGE 1 大型3D场景漫游系统内存管理 在大型3D场景漫游系统中,单个资源(如模型、纹理)所需内存较大且安排和释放频繁,为了防止内存碎片的产生并提高内存安排速度,提出了一种新型内存管理方法。依据程序需求首先划分出一块或多块大的虚拟内存区域,然后基于所划分的内存区域进行内存安排和回收管理。在该管理方法中,对于程序中的小资源,使用内存池;对于大的资源,则使用伙伴系统内存管理方法。试验结果表明,该内存管理方法高效且稳定。 引言 在大型3D场景漫游系统中,场景资源多,无法一次性载入内存,漫游过程中场景的变化导致内存申请和释放特别频繁。场景中三维模型和纹理数量浩大,并且单个资源占用内存比较多,假如程序运行过程有大量内存碎片产生,资源内存申请就很难成功。因此,健壮的内存管理是系统性能关键因素之一。传统做法考虑较多的是小内存安排算法,一般没有考虑三维模型和纹理资源的内存安排,而是直接使用C/C++中的动态内存管理。这种内存管理算法能满意常规的内存管理,但在大型3D场景漫游系统中,由于查找空闲内存速度慢和简单产生内存碎片,C/C++的动态内存管理难以达到良好的性能与稳定。本文提出了一种高效率的内存管理方法,基于操作系统虚拟内存,使用伙伴系统和内存池进行内存管理,该方法简洁易行。本文首先具体介绍内存管理各个层次,最终通过试验结果可见该方法效果很好。 一、内存管理层次模型 本文系统是基于Windows平台,首先介绍Windows的内存管理机制。计算机全部运行程序都需要经过内存来执行,假如执行的程序很大或许多,就会导致内存消耗殆尽。为此,Windows中运用了虚拟内存技术,即拿出一部分硬盘空间来充当内存使用,当内存占用完,就会自动调用硬盘来充当内存,以缓解内存的紧急。Windows平台上的每个进程都被赋予了它自己的虚拟内存地址空间。用户用到的内存都是虚拟内存,Windows内存管理器负责将虚拟地址转译成物理内存。当进程被创建并被赋予它的地址空间时,该可用地址空间主体是空闲的,即未安排的。若要使用该地址空间的各部分,必需通过调用VirtualAlloc函数来安排它里边的各个区域。在3D场景漫游系统中,为了达到自主管理内存,需要获取自己的内存资源。而Windows的内存机制正好可以满意这一点。首先依据需求使用VirtualAlloc函数申请一块或多块的虚拟内存区域。本文的内存管理就是基于这些划分出来的虚拟内存区域,内存管理层次模型如图1所示。 图1:本文内存管理层次模型 二、伙伴系统资源内存管理 在大型3D漫游场景中,三维模型和纹理数量浩大,并且单个资源占用内存比较多,一般都在几十K以上,漫游过程中场景变化意味着频繁地安排和释放内存。传统的做法一般都没有考虑大的资源内存管理,直接使用C/C++中的动态内存安排。该动态内存安排一般基于线性链表,极易导致内存碎片和内存管理速度慢。本文基于Windows虚拟内存,对内存进行管理,既利用了操作系统的强大内存管理算法,又增加了敏捷度。 2.1伙伴系统简介 伙伴系统是操作系统中最为常用的一种动态内存管理算法。对于一个N字节的存储恳求,伙伴系统首先确定使得2(k)≥N的最小k值。若在可利用空间表中能找到2(k)大小的空闲块,则进行安排,否则就找一个更大的空闲块,把它均分成两半,不断重复这个分割过程,直到生成一个2(k)大小的空闲块,并把它安排出去。由同一块分裂出来的小块就称之为“伙伴系统”。回收时,只有两个“伙伴”都为空闲时才合并成一个很大的空闲块。伙伴系统安排和回收速度快、算法简洁,但是内存安排的大小都是2的幂次方,比如应用程序申请20kB的空间,系统必需安排32kB的空间,这就造成了空间利用率不高。 2.2伙伴系统在本文中的应用 内存碎片是空闲内存以小而不连续方式出现在不同的位置。在3D场景漫游系统中,假如将各种大小的内存都放在同一线性空间中安排,安排出去的小内存因数量浩大而将空闲内存拆分成零碎的空间。3D场景资源需要许多大的空闲内存,所以直接从线性空间安排内存很简单造成安排失败,在线性空间中查找空闲内存也会消耗大量时间。伙伴系统的特点正好可以解决这个问题,但是伙伴系统一个很大的不足是只有两个空闲伙伴才能合并成更大的空闲内存。为此,本文对伙伴系统最小内存块做了最小设定(如2k),防止整个伙伴系统产生太小的内存碎片,便于伙伴合并,伙伴系统初始空闲块由申请到的虚拟内存组成(如图1所示)。 在大型3D场景漫游系统中,单个资源(如模型、纹理)所需内存较大且安排和释放频繁,为了防止内存碎片的产生并提高内存安排速度,提出了一种新型内存管理方法。依据程序需

文档评论(0)

185****8664 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档