堆和栈的使用.ppt

堆和栈的使用.ppt

ID:48812700

大小:115.00 KB

页数:24页

时间:2020-01-28

堆和栈的使用.ppt_第1页
堆和栈的使用.ppt_第2页
堆和栈的使用.ppt_第3页
堆和栈的使用.ppt_第4页
堆和栈的使用.ppt_第5页
资源描述:

《堆和栈的使用.ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、堆和栈的使用本节课程主要知识点堆栈各种内存分配方法的对比重点和难点重点堆和栈的基本概念难点堆的使用堆内存的页内存是以页为单位分配的。内存页的大小与具体的CPU有关。页的大小一般是1KB,4KB,64KB等。如果应用程序以页的方式来申请分配内存,内存不仅会浪费严重,执行效率也会比较低。堆是解决应用程序分配内存的良方。堆堆是一段连续的虚拟地址空间。每一个进程都管理着一个堆。应用程序在堆中可以动态地分配、释放所需大小的内存块。在堆内分配内存块可以是任意大小的,而直接分配内存就必须以内存页为单位。本地堆默认情况下,WindowsCE为本地堆保留一定大小的虚拟内存空间,如果不够的

2、话,可用函数VirtualAlloc()申请更多的内存。保留的虚拟内存并不立刻提交分配物理内存。当堆中的块被释放时,系统将查看是否整个页都已经被释放,如果是,该页将被回收。本地堆的附加空间如果应用程序在本地堆中分配了超过本地堆的上限(如188KB),系统将会分配更多的空间给本地堆。增加堆大小将需要一个分离的,不连续的保留地址空间作为堆的附加空间。在本地堆中分配内存堆内分配内存可以任意大小,单位为字节,所分配的内存称为块。使用完后注意要回收分配的内存。WindowsCE只支持堆中静态块(不能够移动的块)的分配,这样随着时间的推移,多次创建释放内存块,堆内就会产生大量内存的

3、碎片。堆的碎片在WindowsCE6.0创建的堆中,所申请的内存块不能够移动,多次创建内存块、释放内存块会产生内存碎块。当需要分配一个大一点的、连续的内存块时,本来空闲的内存块加起来足够大,但是这些内存块是分隔的,系统无法分配这些内存碎片。碎片的解决程序员如果要频繁的在堆中创建、释放内存块的话,最好自己创建一个单独的堆,而不用默认的堆。在使用结束后要及时释放掉该内存堆。本地堆的操作函数在堆中申请内存可使用malloc/free、new/delete、LocalAlloc/LocallFree函数。内存块的大小可以通过LocalSize函数查询。独立堆为了避免本地堆的内存

4、碎片,可以使用独立堆。独立堆是在系统需要内存时创建,而在使用结束后释放。当在一段时间内需要一段连续空间时,使用独立堆是一个很好的选择。独立堆的典型应用当文本编辑器打开或创建一个文本文件时,就可以创建一个独立堆。当文件打开或关闭时候,这些独立堆将会创建或释放。独立堆的操作函数HeapCreate创建独立堆HeapFree在独立堆中释放内存块HeapAlloc在独立堆中分配内存块HeapDestroy释放独立堆栈栈栈是进程中的一个重要的数据结构。函数使用栈传递参数,函数中的局部变量也存放在栈中。每个线程都有一个栈,在线程创建时由系统为其分配。线程栈的大小默认为56KB,可以

5、通过使用编译器的/STACKSIZE参数,调整栈的大小。栈的使用栈不能由用户程序自己创建。栈的溢出会导致应用程序的退出,程序设计时一定要注意。不要在较低内存配置的情况下使用大量的栈。静态数据WindowsCE为应用程序的静态数据分配了read/write和readonly两个内存区域。这两个内存区域以页面为单位来分配内存。应用程序设计时要尽量保证静态数据区域没有空间的浪费。各种内存分配方法的对比直接分配内存优点大的内存块最好是直接分配虚拟内存。是最灵活的内存分配类型。缺点担心页面的粒度造成浪费。需跟踪保留页面和提交页面的情况。本地堆优点使用便利,不需要用户自己创建。可根

6、据需要来增加。缺点多次访问后会产生碎片。系统没有回收碎片的机制。独立堆优点完全根据需要来创建。可以随时释放其内存,从而将内存碎片问题消灭在萌牙状态。缺点须手工创建和释放相应的内存栈优点易于使用缺点低内存配置时需要考虑栈的大小静态数据优点静态数据的页面总是要分配的程序设计时,常量数据常置于ReadOnly区域。

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。