メモリセグメント
memory segments
メモリレイアウト、データセグメント
1つのプロセスに割り当てられる仮想アドレス空間のセグメントの話
言語の仕様や実装による
メモリをどう扱うかという話なので、好きなように分けちゃって良い
一般的にこの4つに分けると便利だよね、みたいなのがあるだけ
https://gyazo.com/907cfe024a52e55111dd547bcf87ab80 https://en.wikipedia.org/wiki/File:Program_memory_layout.pdf
下がアドレス0
上に行くほどアドレスは大きくなる
静的な領域
コンパイルやリンクの時点でサイズや場所が決まる
テキスト領域
データ領域
BSS領域
block starting symbol
初期化されていないグローバル変数を置く
https://en.wikipedia.org/wiki/.bss
動的な領域
実行時にサイズや場所が決まる
ヒープ領域
動的にサイズが確保されるデータを置く
スタック領域
関数の引数やローカル変数などの一時変数を置く
参考
/mrsekut-book-4774154644/051 (2.3 プロセスに割り当てられるメモリ)
メモリとスタックとヒープとプログラミング言語 | κeenのHappy Hacκing Blog
Ruby, PHP, Python, C, Java, Rustについても
仮想メモリ空間のメモリマップを調べる - th0x4c 備忘録
実験して各セグメントのサイズを可視化
https://teratail.com/questions/151094
https://en.wikipedia.org/wiki/Data_segment
http://www.cs.uwm.edu/classes/cs315/Bacon/Lecture/HTML/ch10s04.html
https://www.geeksforgeeks.org/memory-layout-of-c-program/