15

リンク時間が問題になるような、多くのオブジェクト ファイルを含む大規模なシステムがあるとします。また、システム内の多くのクラスと関数が翻訳単位の外では使用されていないことがわかっているとします。

  1. 外部リンケージを持つシンボルの数を減らすと、リンク時間が短縮されると仮定するのは合理的ですか?
  2. その場合、単一の TU でのみ使用されるエンティティ (クラスや関数など) を名前のない名前空間に配置すると、何か効果がありますか? 技術的には、外部リンケージを持つエンティティは名前のない名前空間で外部リンケージを保持しますが、C++11 標準の注意事項として、

名前のない名前空間内のエンティティは外部リンケージを持っている可能性がありますが、それらは翻訳単位に固有の名前によって効果的に修飾されているため、他の翻訳単位からは決して見ることができません。

リンカ アルゴリズムは、名前のない名前空間で外部リンケージを持つエンティティは名前空間の外では見えないという知識に基づいて最適化を実行しますか?

4

2 に答える 2

4

はい、リンク時間が短縮されると思います。私はこれを Google クロム スタイルで考えています。ここにリンク

これは chromium プロジェクトに関するものですが、他の C++ プロジェクトにも当てはまるはずです。

于 2012-09-18T03:22:33.340 に答える
1

リンカーがそのような最適化を行う方法がわかりません。リンカーが問題のシンボルを取得するまでに、それらは通常の装飾された外部リンケージ シンボルのように見えるからです。リンカーが匿名の名前空間でコンパイラが名前をどのように装飾するかについての特定の情報を持っていない限り、リンカーがその作業を最適化できる方法はわかりません。

リンカーが実際に CPU バウンドであり、I/O バウンドではないことを確認しましたか? すでに CPU バウンドになっていない場合は、おそらくコードの再編成には役立たないでしょう。

于 2012-09-18T14:56:37.353 に答える