首页 > 电脑专区 > 电脑硬件 >

[内存管理(3)] 获得进程中的所有堆对象[TZZ]

来源:互联网 2023-03-03 10:55:43 78

大家好!今天我给大家介绍一下“通过Windows提供的API函数获取调用进程中已创建的所有堆对象的方法”。这一篇的内容不多,就谈谈GetProcessHeaps函数的用法。如果您觉得这篇教程有帮助,请为我投上宝贵的一票(顺便求个关注),谢谢!dT3办公区 - 实用经验教程分享!

44Visual Studio 2017安装教程dT3办公区 - 实用经验教程分享!

29VS2017中帮助文档安装教程[TZZ]dT3办公区 - 实用经验教程分享!

工具/原料

  • 已安装Visual Studio 2017(或以上版本);
  • 已安装VS2017中的帮助文档(View Helper);

方法/步骤

  • 1

    打开VS2017,新建一个名为“MemoryMgtDemo3”的“Windows控制台应用程序”项目(详细步骤请参考引用文章);dT3办公区 - 实用经验教程分享!

    6[VS2017使用] 创建C语言的控制台项目[TZZ]dT3办公区 - 实用经验教程分享!

    [内存管理(3)] 获得进程中的所有堆对象[TZZ]dT3办公区 - 实用经验教程分享!

  • 2

    在已打开的“MemoryMgtDemo3.cpp”文件的main函数中,定义一个hHeaps句柄数组,然后创建2个自动大小的堆对象;dT3办公区 - 实用经验教程分享!

    0[内存管理(2)] 创建和销毁堆实例[TZZ]dT3办公区 - 实用经验教程分享!

    [内存管理(3)] 获得进程中的所有堆对象[TZZ]dT3办公区 - 实用经验教程分享!

  • 3

    继续向main函数中,创建一个固定大小的堆,并且获取系统默认的堆;dT3办公区 - 实用经验教程分享!

    0[内存管理(1)] 分配和释放堆内存[TZZ]dT3办公区 - 实用经验教程分享!

    [内存管理(3)] 获得进程中的所有堆对象[TZZ]dT3办公区 - 实用经验教程分享!

  • 4

    继续向main函数中添加获取当前进程中所有堆的测试代码。在这份代码中,第一次调用GetProcessHeaps函数获得当前进程中堆的个数,然后分配堆空间后,再次调用此函数获得当前进程中所有堆的句柄;dT3办公区 - 实用经验教程分享!

    [内存管理(3)] 获得进程中的所有堆对象[TZZ]dT3办公区 - 实用经验教程分享!

  • 5

    继续向main函数中添加检测进程堆有效性并输出最大剩余空闲空间大小的测试代码,然后调试运行程序。在新增的测试代码中,通过HeapValidate函数检测堆的有效性,然后通过HeapCompact函数得到指定堆的最大空闲空间大小(并非分配的堆大小);dT3办公区 - 实用经验教程分享!

    [内存管理(3)] 获得进程中的所有堆对象[TZZ]dT3办公区 - 实用经验教程分享!

  • 6

    在弹出的控制台窗口中,可以见到输出的4个当前进程堆的有效性和最大剩余空间信息(注:这些大小是由系统生成的,其机制以后再研究);dT3办公区 - 实用经验教程分享!

    [内存管理(3)] 获得进程中的所有堆对象[TZZ]dT3办公区 - 实用经验教程分享!

  • 6该信息未经许可获取自百度经验
  • 7

    关闭控制台程序返回到main函数中,继续添加对比之前创建的堆句柄和GetProcessHeaps函数获取到的堆句柄的测试代码。在新增的测试代码中,采用一个双层循环,依次比较hHeaps与processHeaps中的句柄值,然后输出打印信息。代码编写完毕后,调试运行程序;dT3办公区 - 实用经验教程分享!

    [内存管理(3)] 获得进程中的所有堆对象[TZZ]dT3办公区 - 实用经验教程分享!

  • 8

    在弹出的控制台窗口中,可以见到hHeaps中的所有堆对象均可以在processHeaps数组中找到,且它们的大小相等,即可以确认之前分配的堆与GetProcessHeaps获得的堆是完全相同的;dT3办公区 - 实用经验教程分享!

    [内存管理(3)] 获得进程中的所有堆对象[TZZ]dT3办公区 - 实用经验教程分享!

  • 9

    至此,获得进程中所有堆对象的测试代码就介绍完毕了。希望对你有帮助,Enjoy!dT3办公区 - 实用经验教程分享!

  • 以上方法由办公区教程网编辑摘抄自百度经验可供大家参考!dT3办公区 - 实用经验教程分享!


    标签: 内存

    办公区 Copyright © 2016-2023 www.bgqu.net. Some Rights Reserved. 备案号:湘ICP备2020019561号统计代码