構造体の最適化
構造体の最適化 ツールは非効率な構造体レイアウトを検出し、Go アプリケーションのメモリ使用量を削減できます。
Go では、構造体のフィールド順がメモリの位置合わせに影響します。 最適でないフィールド順は、余分なパディングバイトを発生させ、構造体全体のサイズを増加させることがあります。
例えば、次の構造体レイアウトは非効率です:
構造体は、次のようにメモリ上に配置されます:
フィールド
Aは 1 バイトを占有します。次の 3 バイトは、フィールド
Bを 4 バイト境界に揃えるためのパディングです。フィールド
Bは 4 バイトを占有します。フィールド
Cは 1 バイトを占有します。さらに 3 バイトのパディングが追加され、構造体全体のサイズが最大位置合わせ要件に一致します。
その結果、構造体のフィールドは 6 バイトしか必要ないのに、構造体全体はメモリ上で 12 バイトを占有します。
より効率的なレイアウトでは、大きいフィールドを先に並べます:
このレイアウトによりパディングが減り、構造体全体のサイズも小さくなります。
GoLand は非効率な構造体レイアウトを検出し、最適化されたフィールド順を提案します。 これにより、プログラムの挙動を変えずにメモリ使用量を削減できます。
構造体の最適化分析を実行する
ファイル、未コミットのファイル、カスタムスコープ、またはプロジェクト全体を分析できます。
構造体の最適化分析を実行する
その後、GoLand はエディター内で非効率な構造体レイアウトを直接ハイライトし、クイックフィックスを提供します。
構造体の最適化インスペクションを有効化する
エディター内で構造体レイアウトのインスペクションを有効化すると、コーディング中に非効率なレイアウトを検出できます
Go パフォーマンス最適化ツールウィンドウからインスペクションを有効化する
メインメニューから を選択します。
Go のパフォーマンス最適化 ツールウィンドウを開きます。
構造体の最適化 を選択します。
デフォルトで '構造体の最適化' インスペクションを有効にする を有効にします。
IDE 設定からインスペクションを有効化する
Ctrl+Alt+S を押して設定を開き、 に移動します。
を展開します。
インスペクションのチェックボックスを有効化します。
オプションで、 パディングが次の値を超える場合のみ強調表示 (バイト) でインスペクションの閾値を構成します。
その後、GoLand はエディター内で非効率な構造体レイアウトを直接ハイライトし、クイックフィックスを提供します。

最適化の提案を確認する
GoLand が非効率な構造体レイアウトを検出すると、無駄なメモリの量を報告し、最適化されたフィールド順を表示します。
インスペクション結果には以下が含まれます:
現在の構造体レイアウト
位置合わせのために追加されたパディングバイト
最適化されたレイアウト
推定されるメモリ削減量
インスペクション結果を選択して、現在と最適化後のレイアウトを比較できます。

最適化を適用する
GoLand が非効率な構造体レイアウトを検出した後、提案された最適化をエディターから、またはインスペクション結果から適用できます。
エディターでクイックフィックスを適用する
ハイライトされた構造体宣言にキャレットを置きます。
Alt+Enter を押す。
構造体 '
StructName' のレイアウトを更新 を選択します。
インスペクション結果から最適化を適用する
Go のパフォーマンス最適化 ツールウィンドウでインスペクション結果を選択します。
提案されたフィールド順を確認します。
更新 をクリックしてください。
