[英]c++ what in-memory compression library?
我已經搜索了內存中的壓縮,發現有很多庫不具備此功能。 zlib似乎被廣泛使用 - 但它似乎也很老了。 我在這里問是否有更新,更好的選擇。
我想在內存中壓縮的數據是大小為幾兆字節(2-16 MB)的內存池,每個塊包含兩個不同結構的數據以及一些指針數組。 在塊內部,結構和數組沒有特定的順序,當應用程序需要創建這樣的元素時,它們只是在另一個之后分配。
你會建議使用什么壓縮庫? 壓縮和解壓縮性能(兩者)比壓縮質量更重要。
另外 - 出於壓縮原因 - 為兩個不同的結構和數組分別使用單獨的池會更好嗎,這樣每個要壓縮的數據塊只包含一種數據?
這是我第一次打算使用內存壓縮,我知道我的問題可能過於籠統,無法給出一個好的答案 - 但每個提示都是受歡迎的!
謝謝!
zlib很好。 許多人都證明,表現和理解。 這就是我在新系統中默認使用的內容,就像你描述的那樣。 它的年齡應被視為其最大的資產之一。
在具有虛擬內存管理器的現代操作系統上執行此操作毫無意義。 你將創建一個對任何東西都沒用的字節blob,在你的虛擬內存地址空間占用空間是沒有充分理由的。 內存管理器不會將它留在RAM中很長時間,它會注意到blob占用的頁面沒有被訪問並將其交換到頁面文件。
此外,如果數據包含指針,則必須翻譯數據。 您可以在完全相同的虛擬內存地址解壓縮數據的幾率,使得指針仍然有效,非常接近於零。 畢竟,你這樣做是為了釋放虛擬內存空間,以前數據使用的漏洞將被其他東西占用。 這種翻譯可能不會是微不足道的,它將需要大量的額外內存。
如果您這樣做是為了避免OOM,請查看對內存映射文件的操作系統支持,並考慮切換到64位代碼。
我不知道有什么比zlib更新/更好... zlib工作正常,盡管它的年齡。 zlib的deflateInit()有一個參數,可以讓您將壓縮速度與壓縮大小進行權衡,因此您可以嘗試使用它來查找最適合您應用程序的設置。
可能有C ++包裝器API為你調用zlib C API,如果你想要一些“更漂亮”的東西......或者如果你沒有,那么它很容易編寫你自己的東西。
對於壓縮,數據非常重要。 在內存中壓縮任意二進制數據是完全浪費時間,會極大地降低性能,並可能最終使您的內存使用率更高。
如果你真的需要更多的內存,你應該看看使用VirtualAlloc或sbrk自己控制內存。 這樣你就可以解決所有物理內存,而不僅僅是2-4GB。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.