RustのStringはいかにメモリ上に保存されるか?
みなさんRust使ってますか?
最近ますます盛り上がっていますよね。
そんなRustで文字列を表現する型である`String`ですが、裏側では少々複雑なメモリ表現になっているんです。
今回はそんな`String`メモリ上にどのように保存されているかを見ていきます。
例えば次のようなコード―
let s1 = String::from("Hello");
これは次の画像のように保存されます。
スタック上に次の3つの領域が確保されます。
ptr
実際に`Hello`という文字列が格納されたヒープ領域を指すポインタ
capacity
ヒープ上に確保された領域の大きさ
この例だと5
len
実際にヒープ上に確保された要素の数
この例だと5
そしてスタック自体のサイズは`usize`×3です。
例えば64bitのパソコンであれば8×3=24byteですね。
簡単な説明としては以上です。
実のところ`String`型は`Vec<u8>`をフィールドに持つ構造体なんですよね。
pub struct String {
vec: Vec<u8>,
}
なので上述のメモリ構造も実は`Vec`そもそもそうなっているのです。
よろしければサポートお願いします! いただいたサポートはクリエイターとしての活動費に使わせていただきます!