[WIP] &str vs String in Rust
TL;DR
&str
はプリミティブ型で、String
は標準ライブラリが提供する型
&str
&str
はプリミティブ型
&str
はスライスの一種- つまりコレクションの一部への参照(
&[u8]
) - preallocated read only memoryにある実データの開始位置へのポインタとデータ長を持つ
- 別称・文字列リテラル
- 不変( read only & cannot resize )
- したがって、コンパイル時にどのようなデータであるか判明するので、バイナリファイルにハードコードされることになり、読み出しが高速になる
- スタックに積まれる
String
- ヒープにメモリを確保する
Vec<u8>
として保持される
- コンパイル時にサイズが不明なテキストを保持することができる
- ヒープにある実データへのポインタとデータ長、そして確保したヒープの許容量(ヒープの再割り当て無しで格納できるUTF-8バイト長)をスタックに持つ
ref: