it-swarm.dev

他のスレッドのスタックは、プロセス仮想アドレス空間のどこにありますか?

次の図は、プロセスのセクションがプロセスの仮想アドレス空間のどこに配置されるかを示しています。

enter image description here

スタックセクションが1つしかないことがわかります(このプロセスには1つのスレッドしかないと思います)。

しかし、このプロセスに別のスレッドがある場合、この2番目のスレッドのスタックはどこに配置されますか?最初のスタックのすぐ下に配置されますか?

5
joseph_m

これはかなり古く、仮想メモリレイアウトのほとんどが時代遅れのモデルです。

実際には、命令とグローバルはそれぞれ、別々のランダムな場所から始まります。リンクライブラリは、メインプログラムとは別に、独自のランダムな場所にマップされます。

ヒープは、必要に応じて空白ページを要求することによって作成されます。これらは、以前に返されたメモリのページに隣接している場合とそうでない場合があります。

多くの場合、仮想メモリの最初と最後のチャンクは予約されており、nullポインタ関連のバグをキャッチするためにアクセス不可とマークされています。

結局のところ、作成された各スレッドのスタック用に(ここでもランダムな場所に)スペースを予約するのに十分な空きスペースがあります。

2
ratchet freak