Win32堆

来源:互联网 发布:java四则运算程序 编辑:程序博客网 时间:2024/06/10 02:21

       在16位的系统中堆有全局堆和局部堆的区别,而在win32中,则没有这个概念,堆是进程空间的一块保留区域,当我们在堆上分配内存时,系统才将保留区域提交到内存,对一个进程来讲,它有一个缺省堆,默认大小为1M,进程的所有线程都在这个堆上进行动态内存操作,而系统也有一个内存管理链表来管理这个堆,标示堆上的空闲与已经使用区域。系统对堆的管理,默认情况下是采取序列化的操作,即同时只能有一个线程对堆进行操作,起到一个保护作用。

     我们也可以为进程创建自己的堆,其优点主要有3个,首先是数据安全性的考虑,当在堆上存储多种数据结构的数据时,对一个数据结构的误操作,可能破坏另外一个数据结构,因此,可以创建多个堆,不同的堆存储不同的数据结构的数据,就不会出现开始的情况,其二在于能有效的进行内存管理,避免浪费内存,其3在于可以提高程序的性能,如果不同结构的数据存放在一个堆中,可能导致同一个结构存放在不同的页面文件中,当我们去访问时,需要不断的切换页面文件,增加了系统开销,而用不通的堆来存储时,就可以减少和避免上述情况,从而提高性能。

    创建堆的主要API如下:

GetProcessHeap()       //获得进程的缺省堆
HeapCreate()                //创建堆
HeapAlloc()                   //在堆上分配内存
HeapReAlloc()             //重新分配内存
HeapSize()                  //获取堆上内存的大小
HeapFree()                //释放堆块
HeapDestroy()          //释放堆
GetProcessHeaps()         //获取进程的堆
HeapValidate()                  //堆有效性检查
HeapLock()                        //加锁
HeapUnlock()                 //减锁

原创粉丝点击