對於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. 是否可以使lzw壓縮/解壓縮並行?
- 2. websocket是否可以支持gzip壓縮?
- 3. TextIO.Write.to(..) - 是否可以指定壓縮?
- 4. 是否可以通過mixin和/或'XOR'壓縮壓縮文件?
- 5. 是否可以通過PHP解壓縮SharpZipLib壓縮響應?
- 6. 是否可以壓縮或壓縮.otf(Open Type Face)文件?
- 7. 壓縮庫Windows運行時
- 8. .net壓縮框架應用程序是否可以在Windows 8上運行
- 9. 是否可以將我的代碼壓縮到少於3行?
- 10. 是否可以使用SQL Server 2005進行壓縮複製
- 11. 是否有可能在運行時壓縮和混淆Javascript代碼?
- 12. 是否可以壓縮/縮小AppleScript代碼?
- 13. 是否可以創建「class」運行時?
- 14. VC++壓縮我的結構?
- 15. 是否可以限制unix中未壓縮的壓縮文件的大小?
- 16. 是否有壓縮
- 17. 使用壓縮JavaScript文件(不運行時間壓縮)
- 18. libcurl中是否有可用的壓縮
- 19. 在運行時壓縮WPF窗口
- 20. 是否可以在運行時修改可執行文件?
- 21. 提琴手:是否可以壓縮/ gzip請求正文?
- 22. 是否可以包含壓縮文件中的JavaScript文件?
- 23. 是否可以在c#中將文件夾壓縮在一起?
- 24. 是否可以使用C#在FTP中壓縮文件夾?
- 25. Nexus OSS是否可以壓縮虛擬OBR元數據?
- 26. 是否有任何算法可以很好地壓縮哈希?
- 27. 是否可以僅壓縮圖像的一部分?
- 28. 是否可以通過腳本標籤加載壓縮腳本?
- 29. Compass是否可以生成擴展和壓縮的CSS文件?
- 30. 服務器可以檢查瀏覽器是否支持壓縮?
「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