Go で簡単な "Hello World" プログラムをコンパイルすると、その実行可能ファイルが予想よりもはるかに大きいことに驚くかもしれません。 。この問題は Go FAQ で取り上げられています: 「なぜ私のつまらないプログラムはこんなに大きなバイナリなのでしょうか?」
その説明は Go のリンク プロセスにあります。 Go は静的リンクを使用します。つまり、Go ランタイムと、動的型チェック、リフレクション、パニック処理に必要なすべての型情報が最終的な実行可能ファイルに含まれます。このアプローチは堅牢なランタイム サポートを提供しますが、ファイル サイズが犠牲になります。
Go to C と比較すると、静的にリンクされた「Hello World」C プログラムは、printf 実装を含めて通常約 750 KB です。対照的に、fmt.Printf を使用する Go 同等のプログラムは、その広範なランタイム サポートと型情報により 1.9 MB を消費します。
ただし、Go プログラムに fmt.Println() 呼び出しをさらに追加しても、サイズは一貫したままになります。 。これは、必要なライブラリとランタイムが実行可能ファイルにすでに含まれているためです。新しいテキストを追加すると、最小限のデータのみが追加されます。
この動作を理解することは、Go 実行可能ファイルを最適化するために不可欠です。 Go のランタイム サポートは多くの利便性を提供しますが、ファイル サイズが犠牲になります。必要な機能のみを使用するようにコードを調整することで、実行可能ファイルの肥大化を軽減できます。
以上がGo 実行ファイルが予想よりもはるかに大きいのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。