1

私の知る限り、スタックは PE セクションにマップされたメモリではありません (つまり、PE の win32 セクションにマップされていません)。

私の質問は: スタック メモリはどこにありますか? オペレーティングシステムはそれをどこに置きますか?

オペレーティング システムは、プロセスの開始時にメモリのページをスタックに割り当て、プロセスのコードにジャンプする前に ESP レジスタ値をそのページに変更しますか? 私はちょっと混乱しています..

4

1 に答える 1

2

オペレーティング システムは、仮想アドレス空間で空き領域が見つかる場所ならどこにでも配置します。これは PE ファイルの一部ではありません。

プロセスごとに 1 つの仮想アドレス空間があります。モジュールはそのアドレス空間にロードされます。そのアドレス空間にヒープが作成されます。スタックも同様です。

アンマネージ プロセスの場合、OS は新しいスレッド用にスタック割り当て全体を予約し、オンデマンドでメモリをコミットします。管理された .net プロセスには、異なるポリシーがあります。各スレッドが作成されるときに、スタック割り当て全体をコミットして予約します。

于 2012-12-26T11:05:51.997 に答える