《项目6内存分配-PDA的内存管理.ppt》由会员分享,可在线阅读,更多相关《项目6内存分配-PDA的内存管理.ppt(20页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、项目项目6:内存分配:内存分配PDA的内存管理的内存管理(2)本节课程主要知识点本节课程主要知识点n n堆n n栈n n各种内存分配方法的对比重点和难点重点n n堆和栈的基本概念 难点n n堆的使用 堆堆堆n n堆是一段连续的虚拟地址空间。每一个进程都管理着一个堆。n n应用程序在堆中可以动态地分配、释放所需大小的内存块。n在堆内分配内存块可以是任意大小的,而直接分配内存就必须以内存页为单位。内存的页n n内存是以页为单位分配的。n n内存页的大小与具体的CPU有关。n n页的大小一般是1KB,4KB,64KB等。本地堆n n默认情况下,Windows CE为本地堆保留192KB的虚拟内存空间
2、,如果不够的话,可用函数VirtualAlloc()申请更多的内存。n n192KB的虚拟内存并不立刻提交分配物理内存。n当堆中的块被释放时,系统将查看是否整个页都已经被释放,如果是那个页将被回收。在本地堆中分配内存n堆内分配内存可以任意大小,单位为字节,所分配的内存称为块。n使用完后注意要回收分配的内存。n在堆中申请内存可使用malloc/free、new/delete、LocalAlloc/LocallFree等函数。nWindows CE5.0只支持堆中固定块的分配,这样随着时间的推移,多次创建释放内存块,堆内就会产生大量内存的碎片。堆的操作函数n nLocalAlloc在堆中申请内存n
3、 nLocalFree释放使用过的内存n nHeapCreate创建堆n nHeapFree释放堆堆的碎片n n在Windows CE5.0创建的堆中,所申请的内存块不能够移动,多次创建内存块、释放内存块会产生内存碎块。n n当需要分配一个大一点的、连续的内存块时,本来空闲的内存块加起来足够大,但是这些内存块是分隔的,系统无法分配这些内存碎片。碎片的解决n n程序员如果要频繁的在堆中创建、释放内存块的话,最好自己创建一个单独的堆,而不用默认的堆。n在使用结束后要及时释放掉该内存堆。栈栈n n栈是进程中的一个重要的数据结构。函数使用栈传递参数,函数中的局部变量也存放在栈中。n n每个线程都有一个
4、栈,在线程创建时由系统为其分配。n n线程栈的大小默认为64KB,可以通过使用编译器的/STACKSIZE参数,调整栈的大小。栈的使用n栈不能由用户程序自己创建。n栈的溢出会导致应用程序的退出,程序设计时一定要注意。n不要在较低内存配置的情况下使用大量的栈。静态数据n nWindows CE为应用程序的静态数据分配了read/write和read only两个内存区域。n n这两个内存区域以页面为单位来分配内存。n应用程序设计时要尽量保证静态数据区域没有空间的浪费。各种内存分配方法的对比各种内存分配方法的对比直接分配内存n优点u大的内存块最好是直接分配虚拟内存。u是最灵活的内存分配类型。n缺点u担心页面的粒度并需跟踪保留页面和提交页面的情况。本地堆n优点u使用便利,不需要用户自己创建。u可根据需要来增加。n缺点u多次访问后会产生碎片。u系统没有回收碎片的机制。单独的堆n优点u完全根据需要来创建。u可以随时释放其内存,从而将内存碎片问题消灭在萌牙状态。n缺点u须手工创建和释放相应的内存栈n优点u易于使用n缺点u低内存配置时需要考虑栈的大小静态数据n优点u静态数据的页面总是要分配的u程序设计时,常量数据常置于Read Only区域。