RustでメモリをBoxに収める
要約
-
Dystroyのブログ記事では、値を
Box<T>でラップすることでRustプログラムのスタックメモリ消費量を削減する方法を解説している。
ポイント
-
Box<T>は値をスタックからヒープに移動し、大きなデータ構造を保持する関数のスタックフレームサイズを縮小する。 - スタックフレームが過大になると、隠れたパフォーマンスコストが生じ、深い再帰やasyncコードではスタックオーバーフローのリスクもある。
- 大きなenumバリアントをBoxingするのは定石的なパターンで、enumはペイロード全体ではなくポインタだけを保持し、サイズをポインタ1つ分に圧縮できる。
- トレードオフはヒープアロケーションとポインタ間接参照が増えること。ボックス化する型が大きくスタック上の寿命が短い場合に最も効果が出る。
Hacker News コメント
- まだ実質的な議論はない。