
メモリ管理
Stack と heap、escape analysis、garbage collector、メモリプロファイリング、pprof、メモリリーク
24 面接問題·
Senior
1Go における stack 割り当てと heap 割り当ての主な違いは何ですか?
1
Go における stack 割り当てと heap 割り当ての主な違いは何ですか?
回答
stack は自動的に管理され、割り当ては非常に高速です(単純な stack pointer の移動)。stack 上の変数は関数が return すると自動的に解放されます。heap はメモリを解放するために garbage collector を必要とし、Go runtime が関与するため割り当てが遅くなります。関数を超えて生き残る変数や、コンパイル時にサイズが不明な変数は heap に配置されます。
2Go における escape analysis とは何ですか?
2
Go における escape analysis とは何ですか?
回答
escape analysis は、変数が stack 上に留まれるか heap に割り当てる必要があるかを判断するために Go コンパイラが行う静的解析です。コンパイラが変数を生成関数の外で参照していると検出した場合(返されたポインタ、グローバル変数への格納など)、その変数は「escape(脱出)」し、heap に割り当てられます。この解析によりメモリ割り当てが自動的に最適化されます。
3コンパイル時に escape analysis の結果を確認するにはどうすればよいですか?
3
コンパイル時に escape analysis の結果を確認するにはどうすればよいですか?
回答
-gcflags=-m フラグを使うと escape analysis の判断を確認できます。-m=2 や -m=3 を使うと変数が escape する理由についてより詳細な情報が得られます。例えば 'go build -gcflags=-m=2' は 'moved to heap: x' のようなメッセージを表示し、変数が heap に移動されたことを示します。このツールはクリティカルなコードでのメモリ割り当てを最適化するために不可欠です。
4
ローカル変数が heap に escape するのはどのような場合ですか?
5
Go における garbage collector の主な役割は何ですか?
+21 面接問題
その他のGo面接トピック
Goの基礎
Junior
25問Goのデータ構造
Junior
20問Go のインターフェース
Junior
18問エラー処理
Junior
20問Goroutine の基礎
Junior
20問Channels
Junior
22問Go Modules
Mid-Level
18問HTTP サーバー
Mid-Level
24問HTTPクライアント
Mid-Level
18問JSON エンコーディング
Mid-Level
20問Database/SQL
Mid-Level
22問context パッケージ
Mid-Level
20問Testing
Mid-Level
22問並行処理パターン
Mid-Level
24問同期プリミティブ
Mid-Level
22問Go Web フレームワーク
Mid-Level
20問REST API 設計
Mid-Level
20問gRPC
Mid-Level
22問Reflection
Senior
20問パフォーマンス最適化
Senior
22問Generics
Senior
20問Go Design Patterns
Senior
24問Microservices
Senior
24問セキュリティと認証
Senior
24問Docker & Containerization
Senior
20問Kubernetes Basics
Senior
22問高度な Go
Senior
20問CLI開発
Senior
20問