微軟開放了mimalloc記憶體分配系統的程式碼

微軟在麻省理工學院許可下開設了一個圖書館 記憶體分配 來自最初為語言的運行時元件創建的記憶體分配系統的實現 科卡 и 精益。 Mimalloc 適合在標準應用程式中使用,無需更改其程式碼,並且可以充當 malloc 函數的透明替代品。支援在 Windows、macOS、Linux、BSD 和其他類 Unix 系統上工作。

mimalloc 的主要特點是其緊湊的實現(少於 3500 行程式碼)和非常高的效能。在 進行的測試 mimalloc 的效能優於所有競爭的記憶體分配庫,包括 傑馬洛克, tcmalloc, smalloc, rpmalloc и .

為了評估性能,一組現有的 標準測試 在某些測試中,mimalloc 比其他系統快很多倍;例如,在不同線程間物件遷移的測試中,mimalloc 竟然比 tcmalloc 和 jemalloc 快了 2.5 倍以上。同時,在大多數測試中,也觀察到較低的記憶體消耗;在某些情況下,記憶體消耗可以減少 25%。

微軟開放了mimalloc記憶體分配系統的程式碼

高效能主要是透過使用空閒清單分片來實現的。 mimalloc 沒有使用一個大列表,而是使用一系列較小的列表,每個列表都綁定到一個記憶體頁。這種方法減少了碎片並增加了記憶體中的資料局部性。記憶體頁是一組大小相似的區塊的分組。在 64 位元系統上,頁面大小通常為 64 KB。如果頁面中沒有剩餘佔用的區塊,則將其完全釋放並將記憶體傳回給作業系統,這會減少長時間運行的程式中的記憶體成本和碎片。

該庫可以包含在連結階段或為已組裝的程式載入(“LD_PRELOAD=/usr/bin/libmimalloc.so myprogram”)。圖書館也提供 API 用於將功能整合到運行時和細粒度行為控制中,例如,用於連接惰性記憶體釋放處理程序和單調遞增引用計數器。可以在應用程式中建立和使用多個“堆”,以便分佈在不同的記憶體區域中。也可以完全釋放堆,而無需遍歷並單獨釋放放置在其中的物件。

可以以安全模式建立庫,其中在區塊邊界處替換特殊記憶體檢查頁(保護頁),並使用區塊分佈的隨機化和已釋放區塊清單的加密。這些措施可以阻止最常見的利用基於堆疊的緩衝區溢位的技術。啟用安全模式後,效能會下降約 3%。

在mimalloc的特性中,也值得注意的是它不易受到大碎片導致的膨脹問題的影響。在最壞的情況下,元資料的記憶體消耗會增加 0.2%,分散式記憶體的記憶體消耗會達到 16.7%。為了避免存取資源時發生衝突,mimalloc 僅使用原子操作。

來源: opennet.ru

添加評論