← Rust

LESSON / ARTICLE

メモリモデルとランタイムの理解

メモリモデルとランタイムの理解を学び、実務での設計判断につなげます。

メモリ領域

スタックは関数呼び出しやローカル変数、ヒープは実行中に確保するデータに使われます。BoxやVecはヒープを利用しますが、実際の配置はコンパイラや最適化に依存します。

サイズとアラインメント

use std::mem::{size_of,align_of};
struct Record{flag:bool,value:u64}
fn main(){println!("{} {}",size_of::<Record>(),align_of::<Record>());}

フィールド間にはパディングが入る場合があります。サイズはプラットフォームに依存します。

DropとRAII

値がスコープを抜けるとDropが呼ばれ、所有リソースを解放します。RAIIは取得と解放をスコープに結びつけます。

設計演習

構造体サイズがフィールドサイズの合計と一致しない理由、型サイズだけでは実メモリ使用量を説明できない理由を整理してください。