澄清堆栈内存 – 在哪里?

据我所知,堆栈不是一个PE部分映射内存(即它没有映射到一个PE win32部分)。

我的问题是:堆栈内存驻留在哪里? 操作系统放在哪里?

当进程启动时,操作系统是否为堆栈分配了一页内存,并在跳转到进程代码之前将ESP寄存器的值更改为该页面? 我有点困惑..

操作系统把它放在虚拟地址空间的任何地方。 它不是PE文件的一部分。

每个进程都有一个虚拟地址空间。 模块被加载到该地址空间。 堆是在该地址空间中创建的。 堆栈也是如此。

对于非托管进程,操作系统为新线程保留整个堆栈分配,然后按需提交内存。 受管理的.net进程有不同的策略。 他们提交并保留每个线程创建时的整个堆栈分配。