実験をしてみました。Linuxです。
ちょっと汚いのですが、プロセスの仮想メモリ空間のレイアウトです。
+------------------------------+ 0x0000000000000000
: :
+------------------------------+
| |
| text | 機械命令
| |
+------------------------------+
| |
| data | 初期化された static 変数
| |
+------------------------------+
| |
| BSS | 初期化されていない static 変数
| |
+------------------------------+
| |
| heap | malloc() で動的に確保される領域(上位アドレスに伸びる)
| |
.......
GDB で info registers とやると、以下のように出てきます。
cs 0x33 51
ss 0x2b 43
ds 0x0 0
es 0x0 0
fs 0x63 99
gs 0x0 0
セグメントレジスタが多少は使われているようですが、
メモリ変換の”セグメント分割”と上の仮想メモリ空間レイアウトのセグメントは何が違うのですか??
リンカはセクション単位で行うはずです。
「ローダが使う情報である」と書いてありましたが、よくわかりません。「アドレス空間の分割」とは関係ないのですか?
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/10/09 05:31