tnakata's blog

Webエンジニア(2017/01/01~)。プログラミングやWebについて語る。学生時代は航空宇宙工学を専攻してた。

Rustのスタックとヒープについて書いてみたがまだよくわからない

変数を宣言して値を代入するということは、メモリ上のアドレスに値を設定するということらしいが、今までこの辺りのことを全く意識せずにプログラミングしてきたのでイメージがわかない。普段Rubyを書いているのでなおさら。

ふと静的言語見てみようと思ってRustのドキュメントを読んでたらちょうどメモリ管理の話が出てきたので、自分の理解をまとめてみる。

スタックとヒープ

スタック

  • Rustではintなどを使用したときにメモリが確保される場所
  • 処理が高速
  • サイズに制限がある
  • ブロックを抜けるとメモリが解放される

ヒープ

  • Rustでは、Box 型を使うことでヒープ上にメモリが確保される
  • 処理が遅い
  • 事実上サイズに制限がない

具体例

  • fn main() {}は省略する。

let x = 5;
address variable value
01 x 5

let x = 5;
let y = 10;

|address|variable|value| |:–|:–|:–| |01|x|5| |02|y|10| ``


let x = Box::new(5);
let y = 42;
address variable value
01 x ->(last)-1
02 y 42
* * *
(last)-1 5

感想

  • ざっくりだが変数を定義して値を代入したときに、メモリ上のアドレスを意識できた
  • とはいえ、だから何?、って思いがある。これがどう役に立つのかがまだわかってないからだし、理解がふわふわしている
  • 「メモリを意識してプログラミングする」というのがわからない状態で、問題が大きすぎる気がする。問題を自分が理解できるくらいまで分解する必要がある気がする