Open2

&str String rust

katayama8000katayama8000

&str

  • 静的領域に格納
  • スタックには、ポインター、長さを持つ
  • ポインターは静的領域にある実データの先頭アドレスを指している
    • s.as_ptr()
  • 長さは静的領域に格納した、文字列のバイト数
    • s.len()
    let s = "hello"; // 5bytes
    let t = "world"; // 5bytes
    println!("s: {:p}", &s);
    println!("t: {:p}", &t);

16byte ( 8:pointer / 8: length ) のズレを確認できる

  • 格納先は静的領域なので、文字列は不変
katayama8000katayama8000

String

  • ヒープに格納
  • スタックには、ポインター、長さ、キャパシティーを持つ
  • ポインターはヒープにある実データの先頭アドレスを指している
    • s.as_ptr()
  • 長さはヒープに格納した、文字列のバイト数
    • s.len()
  • キャパシティーは長さに対応したものを自動的に決めてくれる
    • s.capacity()
    let s = String::from("hello");
    let t = String::from("world");
    println!("s: {:p}", &s);
    println!("t: {:p}", &t);

24byte ( 8:pointer / 8: length / 8: capacity ) のズレを確認できる

  • 格納先はヒープなので、文字列は可変