ホームページ > バックエンド開発 > C++ > GCC および ld ビルドを最適化して未使用のシンボルを削除し、実行可能ファイルのサイズを減らすにはどうすればよいですか?

GCC および ld ビルドを最適化して未使用のシンボルを削除し、実行可能ファイルのサイズを減らすにはどうすればよいですか?

Susan Sarandon
リリース: 2024-12-17 09:33:25
オリジナル
759 人が閲覧しました

How Can We Optimize GCC and ld Builds to Remove Unused Symbols and Reduce Executable Size?

GCC および ld ビルドでの未使用シンボルの最適化された削除

実行可能ファイルをビルドするとき、特に ARM ベースの組み込みシステムの場合、実行可能ファイルのサイズを最適化する必要があります。パフォーマンスを向上させるために重要です。注目すべき問題の 1 つは、バイナリ内に未使用のシンボルが存在し、不必要な肥大化を引き起こすことです。

GCC および LD 環境でこの問題を軽減するために、2 段階のアプローチが採用されています。

ステージ 1: コード セクションの分離

コンパイラ フラグの使用-fdata-sections および -ffunction-sections は、各翻訳単位内のコードを関数、クラス、および外部変数を表す個別のセクションに分割するようにコンパイラーに指示します。これにより、未使用のシンボルの分離が可能になります。

ステージ 2: 未参照セクションの破棄

リンク フェーズ中に、最適化フラグ -Wl,--gc を使用してリンカーを呼び出します。 -sections は、リンカーが参照のないセクションを破棄するようにトリガーします。これにより、未使用のシンボルが最終的な実行可能ファイルから確実に除外されます。

たとえば、2 つの関数 (そのうち 1 つは未使用) を含むファイル test.cpp を考慮すると、次のコマンドは未使用の関数を省略した実行可能ファイルを生成します。

gcc -Os -fdata-sections -ffunction-sections test.cpp -o test -Wl,--gc-sections
ログイン後にコピー

この 2 段階のアプローチを組み込むことで、未使用のシンボルを効果的に削除でき、最終的な実行可能ファイルのサイズが大幅に削減され、それによってロード パフォーマンスが向上します。リソースに制約のある組み込みシステム。

以上がGCC および ld ビルドを最適化して未使用のシンボルを削除し、実行可能ファイルのサイズを減らすにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート