インテル® C++ コンパイラー 18.0 デベロッパー・ガイドおよびリファレンス

実行ファイルから未使用のコードとデータの除外

プログラムには、実行時に使用されない不要なコードやデータが含まれていることがよくあります。不要コードを特定するためコンパイル時にプログラム全体のプロシージャー間の最適化解析を行わなくても、リンク時に不要な関数とデータを排除できるコンパイラー・オプションがあります。

これは、関数レベルのリンクと呼ばれます。

指定するオプション:

Linux* および macOS*: -fdata-sections-ffunction-sections-Wl, --gc-sections
Windows*: /Gy /Qoption,link,/OPT:REF

上記のオプションの一部はリンカーに渡されます。

メリット

実行ファイルには参照されるコードのみが残ります。不要な関数やデータは実行ファイルから削除されます。

デメリット

  • 各関数やデータが個別のセクションに配置されるため、オブジェクト・コードがやや大きくなる可能性があります。オーバーヘッドはリンクステージで排除されます。

  • 未使用セクションの削除には、リンカーのサポートが必要です。

  • この手法により、リンク時間がわずかに増えることがあります。