数日前 最新のリンカーモールド1.1の新しいバージョンのリリースが発表されました。 これは、Linuxシステム上のGNUリンカーのより高速で透過的な代替として使用できます。
この新しいバージョンのモールド1.1には、次のバージョンがあります。 新機能、バグ修正、およびパフォーマンスの改善が含まれています。
カビについて
モールド GNUリンカのすべての機能をサポートします また、作成するリンクはcpユーティリティを使用してファイルをコピーする場合のXNUMX倍の速度であるため、非常に高いパフォーマンスを発揮します。
このように コンパイル時間を短縮すると、大規模なプロジェクトの開発の利便性が大幅に向上します 変更のデバッグおよびテスト時の実行可能ファイル生成プロセスの待機時間を短縮します。
モールドを作成する動機は、コードが変更されるたびにリンクが完了するのを待たなければならないという煩わしさでした。 また、マルチコアシステムの既存のリンカーの効率が低く、インクリメンタルリンクなどの不必要に複雑なモデルに頼ることなく、根本的に異なるリンクアーキテクチャをテストしたいという要望もあります。
モールド内の多数のコンパイラで準備されたオブジェクトファイルから実行可能ファイルをリンクする高性能は、より高速なアルゴリズムの使用、使用可能なCPUコア間の操作のアクティブな並列化、およびデータ構造のより効率的な使用によって実現されます。
例えば モールドは、集中的な計算を同時に実行する手法を実装しています ファイルのコピー、オブジェクトファイルのメモリへのプロアクティブなロード、文字の解決時に高速ハッシュテーブルを使用、 別のストリームで再配置テーブルをスキャンし、セクションを重複排除します 異なるファイルで繰り返されます。
モールド1.1の主な目新しさ
提示されているこの新しいバージョンのMold1.1では、 リンクステージ最適化のサポート (LTO、リンク時間最適化)。
LTOの最適化は、ビルドプロセスに関係するすべてのファイルの状態を考慮に入れることによって異なりますが、従来の最適化モードは各ファイルを個別に最適化し、他のファイルで定義された関数を呼び出すための条件を考慮しません。
以前は、GCCまたはLLVM中間コード(IR)ファイルが検出されると、適切なld.bfdまたはld.lldリンカーが呼び出されましたが、MoldはIRファイルを独自に処理し、GNUldおよびGNUゴールドリンカー。 LTOが有効になっている場合の速度は、ほとんどの時間がリンクではなくコードの最適化に費やされるため、他のリンカーよりもわずかに高速です。
また、 オプションが追加されました 「–print-dependencies」および「–print-dependencies=full」 p依存関係に関する情報をCSV形式で生成するには 入力ファイル間。たとえば、特定のオブジェクトファイルをリンクするとき、またはファイル間の依存関係を最小限に抑えるために作業しているときに、接続の理由を分析するために使用できます。
新しいバージョンから際立っているもうXNUMXつの変更は、 RISC-Vアーキテクチャ(RV64)のサポート ホストおよびターゲットプラットフォーム上。
それに加えて、私たちはそれを見つけることもできます アドレス再配置セクションのコピーを有効にする「–emit-relocs」オプションが追加されました リンク後の段階で適用されるさらなる最適化のために、入力ファイルから最終ファイルまで。
目立つ他の変更のうち:
- 仮想アドレス空間でアドレスを固定する前にセクションの順序をランダム化する「–shuffle-sections」オプションが追加されました。
- 「–warn-once」および「–warn-textrel」オプションが追加されました。
- libxxhashへの依存関係を削除しました。
最後に あなたがそれについてもっと知りたいなら、詳細はで確認できます 次のリンク。
Mouldのインストール方法は?
モールドでの作業に興味のある方は、ソースコードをダウンロードしてコンパイルすることでユーティリティを入手できます。 これを行うには、ターミナルを開いて次のように入力します。
git clone https://github.com/rui314/mold.git
cd mold
git checkout v1.1.1
make -j$(nproc) CXX=clang++
sudo make install
モールドの使用法を知るには、ドキュメントを参照してください このリンクで。