[内存管理(2)] 创建和销毁堆实例[TZZ]
1、打开VS2017,新建一个名为“MemoryMgtDemo2”的“Windows控制台应用程序”项目(详细步骤请参考引用文章);
2、在VS2017打开的“MemoryMgtDemo2.cpp”文件中,添加“查询默认岜躲怡镌堆信息”的测试代码,然后调试运行程序。在新添加的代码中,通过HeapQueryInformatica函数查询调用进程默认堆上的兼容信息(即HeapCompatibilityInformation类别,返回结果保存到ULONG变量中),然后根据查询结果打印对应的中文提示信息(详情请参考HeapQueryInformation函数的MSDN说明);
![[内存管理(2)] 创建和销毁堆实例[TZZ]](https://exp-picture.cdn.bcebos.com/6a408cdd3340b6f319ef9da912c0affce086eefd.jpg)
4、关闭控制台窗口返回到“MemoryMgtDemo2.cpp”文件中。为了方便输出堆实例的信息,可以将打印堆信息的代码放入一个独立定义的函数“tx_print_heap_info”中。以后需要输出堆信息时,只需要调用此函数即可;
![[内存管理(2)] 创建和销毁堆实例[TZZ]](https://exp-picture.cdn.bcebos.com/3201a8f39187031c13a831496a86242fa972ecfd.jpg)
6、在弹出的控制台窗口中,可以见到“将默认堆设置为标准堆失败…”的字样。在Win7系统中,默认情况下所有堆(无论是默认堆,还是通过HeapCreate创建的堆)都是LFH,并且禁止程序修改。有意思的是,你可以通过HeapSetInformation函数将一个LFH设置为LFH(即该函数会调用成功);
![[内存管理(2)] 创建和销毁堆实例[TZZ]](https://exp-picture.cdn.bcebos.com/90c61d1c99c0affc6deeba9a2372941fbfe4eafd.jpg)
8、在弹出的控制台窗口中,可以确认默认大小的堆创建成功;
![[内存管理(2)] 创建和销毁堆实例[TZZ]](https://exp-picture.cdn.bcebos.com/9881b1fce186242f261a0aaa35e434daf15ee8fd.jpg)
10、在弹出的控制台窗口中,可以见到固定大小的堆实例创建成功的输出信息;
![[内存管理(2)] 创建和销毁堆实例[TZZ]](https://exp-picture.cdn.bcebos.com/562787cf02532f6339ec7e83699147e832e05cc2.jpg)
![[内存管理(2)] 创建和销毁堆实例[TZZ]](https://exp-picture.cdn.bcebos.com/031231632385e036fef8d95db8e039723c035ac2.jpg)
12、至此,创建和销毁堆实例的测试代码就介绍完毕了。在使用中务必记得HeapCreate函数和HeapDestroy函数应当成对出现,防止堆实例因为未销毁而出现内存泄漏。Enjoy!