私はスレッドがコード/グローバルデータを共有しているが、スタックが異なることを知っています。各スレッドには独自のスタックがあります。私は各プロセスのための1つの仮想アドレス空間があると信じています。これは、各スレッドがこの単一の仮想アドレス空間を使用することを意味します。1つの仮想アドレス空間内のプロセススレッドのメモリ管理はどのように行われますか?
仮想アドレス空間に複数のスレッドがある場合にスタック/ヒープがどのように成長するか知りたいですか? 1つのスレッドでスタック領域がいっぱいになった場合、OSはどのように管理しますか?
Windowsでは、各スレッドはスタックのアドレス空間のブロックを取得します。デフォルトでは1MBです。スレッドがこの領域をオーバーフローすると、アプリケーションがクラッシュします。 –
一般に、OS、Cランタイム、独自のコードの3つの関係者が関与しています。 OSは、あなたのプログラムがC言語で書かれていること、そしてCランタイムが 'malloc/free'を使ってヒープを管理していることや、C++プログラムが' new/delete'を使っていることには気にしません。 – MSalters