对于Visual C++运行时堆,我可以获得与HeapCompact()
相同的效果吗?我怎样才能做到这一点?是否可以压缩VC++运行时堆?
回答
您可以使用_get_heap_handle获取CRT堆的HANDLE,然后调用HeapCompact。不确定这是否支持/稳定,因为我自己没有尝试过。我想你会想在序列化模式下调用HeapCompact来让这个工作有任何机会。
如果您打算遇到这个问题,只需调用句柄上的HeapSetInformation(_get_heap_handle上的每个MDSN文档),并让内置的LFH为您处理压缩。
IIRC不是没有编写自己的内存管理器。这也是一件不平凡的工作,尤其是如果您希望不仅仅将相邻较小的空白内存块组合成较大的内存块,而且还要做更多的工作。
实际上,组合相邻的块是HeapCompact()唯一的功能。 – sharptooth 2010-03-10 13:37:32
你必须*真的*需要这样做,因为没有更好的主意。 – Spike 2010-03-10 14:24:35
是的,内存分配失败的一个原因是堆碎片。在'malloc()'返回'NULL'的情况下,你可以尝试'HeapCompact(GetProcessHeap(),0)',再次交叉你的手指,然后再'malloc()'。其实这是一个糟糕的解决方案,但当时间紧迫时它可能会有所帮助。您应该真正优化/改变程序的内存分配策略,例如使用内存映射文件([link1](http://msdn.microsoft.com/en-en/library/dd997372.aspx)和[link2](http://en.wikibooks.org/wiki/Optimizing_C%2B %2B/General_optimization_techniques /输入/输出#内存mapped_file所))。 – 2012-09-05 12:36:24
- 1. websocket是否可以支持gzip压缩?
- 2. TextIO.Write.to(..) - 是否可以指定压缩?
- 3. 是否可以通过PHP解压缩SharpZipLib压缩响应?
- 4. 是否可以压缩或压缩.otf(Open Type Face)文件?
- 5. 压缩库Windows运行时
- 6. .net压缩框架应用程序是否可以在Windows 8上运行
- 7. 是否可以使用SQL Server 2005进行压缩复制
- 8. 是否可以将我的代码压缩到少于3行?
- 9. 是否可以压缩/缩小AppleScript代码?
- 10. 是否可以创建“class”运行时?
- 11. VC++压缩我的结构?
- 12. 是否有压缩
- 13. 在运行时压缩WPF窗口
- 14. 是否可以包含压缩文件中的JavaScript文件?
- 15. 是否可以解压缩Aspen InfoPlus.21/sqlplus中的CompQueryDefs?
- 16. 是否可以关闭应用程序中的IIS压缩?
- 17. 是否可以使用C#在FTP中压缩文件夹?
- 18. 是否可以在c#中将文件夹压缩在一起?
- 19. 服务器可以检查浏览器是否支持压缩?
- 20. Subversion是否包含压缩?
- 21. 是否值得压缩BLOB?
- 22. 我可以压缩Response.write吗?
- 23. 如何使用列表压缩一堆IF语句 - 可以吗?
- 24. 是否可以对自动包含的脚本进行gzip压缩?
- 25. 压缩 - java.lang.OutOfMemoryError:Java堆空间
- 26. 运行时错误在vC++
- 27. JavaScript是否可以在UIWebView中运行?
- 28. 是否可以在iframe中运行setTimeout?
- 29. 是否可以在Arduino上运行ZeroMQ
- 30. 是否可以在CUarray上运行cuMemset?
“run-time heap”是什么意思?还有什么其他的? – 2010-03-10 10:14:44
@Neil Butterworth:我的意思是malloc()使用的那个。在Win32中,程序可以使用HeapCreate()创建更多的堆。 – sharptooth 2010-03-10 10:23:18
出于兴趣,是否有一个令人惊讶的好理由,即自由块合并不会自动发生? http://msdn.microsoft.com/en-us/library/cc265897.aspx – 2010-03-10 11:27:57