是否可以压缩 VC++运行时堆?
我可以达到与 HeapCompact( 相同的效果吗)
用于 Visual C++ 运行时堆?我怎样才能做到这一点?
Can I have the same effect as with HeapCompact()
for the Visual C++ runtime heap? How can I achieve that?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您可以使用 _get_heap_handle 获取 CRT 堆的 HANDLE,然后对其调用 HeapCompact。不确定这是否受支持/稳定,因为我自己还没有尝试过。我想您会希望以序列化模式调用 HeapCompact 才能有机会实现此功能。
如果您遇到这个麻烦,只需在句柄上调用 HeapSetInformation(根据 _get_heap_handle 上的 MDSN 文档)并让内置 LFH 为您处理压缩。
You can get a HANDLE for the CRT heap using _get_heap_handle, then call HeapCompact on it. Not sure whether this is supported/stable as I have not tried this myself. I imagine you would want to call HeapCompact in serialized mode to have any chance of this working.
If you are going to this trouble just call HeapSetInformation on the handle (per MDSN docs on _get_heap_handle) and let the built-in LFH handle compaction for you.
IIRC 不能不编写自己的内存管理器。这也是一项不平凡的工作,特别是如果您希望做的不仅仅是将相邻的较小的空内存块组合成较大的内存块。
IIRC not without writing your own memory manager. It's also a non-trivial piece of work, especially if you expect to do more than just combining adjacent smaller empty memory blocks into larger ones.