gold
リンカーを使った人はいますか?かなり大きなプロジェクトをリンクするには、GNUの代わりにこれを使用する必要がありますが、ld
エラーが発生して接続に失敗します。
リンカーは失敗した大規模プロジェクトをどのようにgold
リンクできますか?ld
一種のメモリ不正行為はありますか?
答え1
このリンカーは、BFD(「従来の」GNU binutilsリンカー)よりもメンテナンスが簡単で高速なリンカーをgold
作成することを目的としたELF関連リンカーとして設計されています。ld
副作用として、BFDより少ないメモリを使用して非常に大きなプログラムを接続することができますld
。おそらく、処理する抽象化層が少なく、リンカのデータ構造がELF形式に直接マッピングされているからです。
2つのリンカー間のデザインの違いと、メモリ使用量に与える影響を具体的に説明する文書がどれだけ多いかはわかりません。非常に興味深い点があります。リンカーに関する記事シリーズ著者:さまざまなGNUリンカーの著者であるIan Lance Taylorが.heの原因を説明していますgold
。書くそれ
私が今使っているリンカーはgoldと呼ばれ、私の3番目のリンカーになります。それは単なるELFリンカーです。繰り返しますが、目標はスピードです。この場合、2番目のリンカーよりも高速です。長年にわたり、リンカーはELFと共有ライブラリのサポートを追加することで大幅に遅くなりました。このサポートは設計されたものではなくパッチされています。
(2番目のリンカーはBFDですld
。)
答え2
ゴールドリンカーは、接続プロセスを高速化するために作成されました。金の著者によるとイアン・ランステイラー
現在、Goldには既存のリンカーと比較して唯一の重要な利点があります。まさにスピードが速いということです。大規模なC++プログラムでは、5倍速く実行されることが測定されました。
彼はゴールデンリンカーのパフォーマンスを従来のGNUリンカーと比較しています。 gold(GNUリンカーとは異なり)はBFDライブラリを使用してオブジェクトファイルを処理しません。
goldの制限は、(複数のオブジェクトファイルタイプを処理できるGNUリンカとは異なり)、ELF形式のオブジェクトファイルのみをリンクできることです。
GNUリンカが経験している問題に対する興味深い答えは次のとおりです。似たような質問マイケル・アダムから:
ゴールデンリンカーはいくつかの詳細で古典的なリンカーよりも正確に見えたので、コードにはいくつかの依存関係の問題もありました。このSambaコミットを参照してください。
答え3
gold
ld
ベンチマークと比較
私は、LDとゴールドの特定の合成ベンチマークを次の場所に公開しました。https://stackoverflow.com/questions/3476093/replacing-ld-with-gold-any-experience/53921263#53921263
結果のまとめ:金はldより2〜3倍速いです。
テンプレートとコード生成が制御できない複雑なC ++プロジェクトの場合、接続フェーズはプロジェクト内のすべてのファイルに影響を与え、コンパイルとは異なり、常に完了する必要があるため、これらの時間の利点は膨大なゲームチェンジャーになる可能性があります。ちょうど.cppファイルです。
したがって、リンク時間が遅いと開発サイクルに耐えることができなくなり、おそらくGoogleがリソースを投資する主な理由になります。マイナーなファイル変更ごとに、30秒ではなく10秒待つという利点を想像してください。
この答えでも述べたように、合成ベンチマークの時間利得は、複雑な実際のプロジェクト(gem5)から得られた実際の利得とも一致します。
答え4
最新のGNU / Linuxシステムには3つのリンカーがあります。
速度ベンチマークについては、以下を参照してください。https://www.phoronix.com/scan.php?page=article&item=lld4-linux-tests&num=2TL、DR:lld
最も速く、gold
次にld
一部の情報源は、金プロジェクト流れない、Fedoraのパッケージ構造はこれを反映しています。