[内存管理(2)] 创建和销毁堆实例[TZZ]

2024-10-12 10:47:37

1、打开VS2017,新建一个名为“MemoryMgtDemo2”的“Windows控制台应用程序”项目(详细步骤请参考引用文章);

2、在VS2017打开的“MemoryMgtDemo2.cpp”文件中,添加“查询默认岜躲怡镌堆信息”的测试代码,然后调试运行程序。在新添加的代码中,通过HeapQueryInformatica函数查询调用进程默认堆上的兼容信息(即HeapCompatibilityInformation类别,返回结果保存到ULONG变量中),然后根据查询结果打印对应的中文提示信息(详情请参考HeapQueryInformation函数的MSDN说明);

[内存管理(2)] 创建和销毁堆实例[TZZ]

4、关闭控制台窗口返回到“MemoryMgtDemo2.cpp”文件中。为了方便输出堆实例的信息,可以将打印堆信息的代码放入一个独立定义的函数“tx_print_heap_info”中。以后需要输出堆信息时,只需要调用此函数即可;

[内存管理(2)] 创建和销毁堆实例[TZZ]

6、在弹出的控制台窗口中,可以见到“将默认堆设置为标准堆失败…”的字样。在Win7系统中,默认情况下所有堆(无论是默认堆,还是通过HeapCreate创建的堆)都是LFH,并且禁止程序修改。有意思的是,你可以通过HeapSetInformation函数将一个LFH设置为LFH(即该函数会调用成功);

[内存管理(2)] 创建和销毁堆实例[TZZ]

8、在弹出的控制台窗口中,可以确认默认大小的堆创建成功;

[内存管理(2)] 创建和销毁堆实例[TZZ]

10、在弹出的控制台窗口中,可以见到固定大小的堆实例创建成功的输出信息;

[内存管理(2)] 创建和销毁堆实例[TZZ][内存管理(2)] 创建和销毁堆实例[TZZ]

12、至此,创建和销毁堆实例的测试代码就介绍完毕了。在使用中务必记得HeapCreate函数和HeapDestroy函数应当成对出现,防止堆实例因为未销毁而出现内存泄漏。Enjoy!

猜你喜欢