🙌
【メモリ割り当て】静的/スタック/ヒープメモリ
メモリ割り当ては3つの方法がある
静的メモリ割り当て(static memory allocation)
- 割り当てられるメモリサイズは固定されている
- プログラムの開始から終了までメモリ上にずっと残るから、いつでもどこからでも呼び出し可能
- グローバル変数等
スタックメモリ割り当て(stack memory allocation)
- 自動メモリ割り当て(automatic memory allocation)とも呼ばれる
- 関数が呼び出されたタイミングで、新しいメモリブロックを確保する(push)
- 関数の呼び出しが完了すると、プログラムの終了を待たずにメモリに格納されたデータは削除される(pop)
- ローカル変数等
ヒープメモリ割り当て
- 動的メモリ割り当て(dynamic memory allocation)とも呼ばれる
- 関数がスタックからpopされても、ヒープメモリのメモリアドレスが参照可能な限りデータ取得可能
- プログラマがヒープ割り当てを削除し忘れ、メモリを無駄遣いしている状態をメモリリークと呼ぶ
- ほとんどの言語では自動的にインタプリタ/コンパイラが実施してくれるので気にしなくて良い(=ガベージコレクタと呼ばれる。メモリ上の使っていないものを回収してくれる管理人的処理)
- ヒープメモリを自動的に管理する言語では、手動でメモリを割り当てる機能がない
参考
Discussion