幾天前 宣布發布現代 Linker Mold 1.1 的新版本, 它可以用作 Linux 系統上 GNU 鏈接器的更快透明的替代品。
在這個新版本的模具 1.1 是一個版本, 包含新功能、錯誤修復和性能改進。
關於模具
模 支持 GNU 鏈接器的所有功能 並且它具有非常高的性能,因為它創建的鏈接僅是使用 cp 實用程序簡單複製文件的速度的兩倍。
這樣, 減少編譯時間顯著提高開發大型項目的便利性 通過減少調試和測試更改時可執行文件生成過程中的等待時間。
創建 Mold 的動機是每次代碼更改後必須等待鏈接完成的煩惱, 以及多核系統中現有鏈接器的低效率以及希望測試完全不同的鏈接架構而不訴諸不必要的複雜模型(例如增量鏈接)。
通過使用更快的算法、可用 CPU 內核之間的主動並行化操作以及更高效地使用數據結構,可以在 Mold 中從大量編譯器準備好的目標文件中鏈接可執行文件的高性能。
例如: Mold實現了一種同時執行密集計算的技術 通過文件複製,主動將目標文件加載到內存中,在解析字符時使用快速哈希表, 在單獨的流中掃描重定位表並刪除重複部分 在不同的文件中重複。
Mold 1.1的主要創新
在展示的這個新版本的 Mold 1.1 中,強調了 支持鏈接階段優化 (LTO,鏈接時間優化)。
LTO 優化的不同之處在於考慮了構建過程中涉及的所有文件的狀態,而傳統的優化模式單獨優化每個文件並且不考慮調用其他文件中定義的函數的條件。
以前,當遇到 GCC 或 LLVM 中間代碼 (IR) 文件時,會調用適當的 ld.bfd 或 ld.lld 鏈接器,但現在 Mold 自己處理 IR 文件並使用 Linker 插件 API,也用於 GNU ld 和GNU 黃金鍊接器。 啟用 LTO 時的速度僅比其他鏈接器快一點,因為大部分時間都花在優化代碼上,而不是鏈接上。
還強調了 添加的選項 “--print-dependencies”和“--print-dependencies=full” p以 CSV 格式生成有關依賴項的信息 在輸入文件之間,例如,可用於在鏈接某些目標文件時分析連接原因,或在努力最小化文件之間的依賴關係時。
從新版本中脫穎而出的另一個變化是 支持 RISC-V 架構 (RV64) 在主機和目標平台上。
除此之外,我們還可以發現 添加了“–emit-relocs”選項以啟用地址重定位部分的複制 從輸入文件到最終文件,以便在鏈接後階段應用進一步優化。
在其他突出的變化中:
- 添加了選項“–shuffle-sections”以在將其地址固定在虛擬地址空間中之前隨機化部分的順序。
- 添加了“–warn-once”和“–warn-textrel”選項。
- 刪除了對 libxxhash 的依賴。
終於 如果您有興趣了解更多信息,您可以在中查看詳細信息 以下鏈接。
如何安裝模具?
對於那些對能夠使用 Mold 感興趣的人,他們可以通過下載和編譯源代碼來獲得該實用程序。 為此,只需打開一個終端並鍵入以下內容:
git clone https://github.com/rui314/mold.git
cd mold
git checkout v1.1.1
make -j$(nproc) CXX=clang++
sudo make install
想知道Mold的使用,可以查閱文檔 在此鏈接中。