🙌

【メモリ割り当て】静的/スタック/ヒープメモリ

2024/10/05に公開

メモリ割り当ては3つの方法がある

静的メモリ割り当て(static memory allocation)

  • 割り当てられるメモリサイズは固定されている
  • プログラムの開始から終了までメモリ上にずっと残るから、いつでもどこからでも呼び出し可能
  • グローバル変数等

スタックメモリ割り当て(stack memory allocation)

  • 自動メモリ割り当て(automatic memory allocation)とも呼ばれる
  • 関数が呼び出されたタイミングで、新しいメモリブロックを確保する(push)
  • 関数の呼び出しが完了すると、プログラムの終了を待たずにメモリに格納されたデータは削除される(pop)
  • ローカル変数等

https://zenn.dev/417yr/articles/80cf5ba2dae627

https://zenn.dev/417yr/articles/e5ea0f40d0b962

ヒープメモリ割り当て

  • 動的メモリ割り当て(dynamic memory allocation)とも呼ばれる
  • 関数がスタックからpopされても、ヒープメモリのメモリアドレスが参照可能な限りデータ取得可能
  • プログラマがヒープ割り当てを削除し忘れ、メモリを無駄遣いしている状態をメモリリークと呼ぶ
    • ほとんどの言語では自動的にインタプリタ/コンパイラが実施してくれるので気にしなくて良い(=ガベージコレクタと呼ばれる。メモリ上の使っていないものを回収してくれる管理人的処理)
  • ヒープメモリを自動的に管理する言語では、手動でメモリを割り当てる機能がない

https://zenn.dev/417yr/articles/dda139c14a53e1

参考

https://wa3.i-3-i.info/word1176.html

Discussion