2

我最近一直在阅读调用堆栈。然而,我一直在阅读的所有示例和文章都是单线程的。我对调用堆栈在内存中的样子以及我们如何分析它很感兴趣。

很抱歉在一篇文章中包含这么多问题。但是,当每个问题都相关时,为每个问题创建一个帖子似乎很麻烦。

我的问题是针对 Windows x86 的。所以我遇到困难的问题是:

  1. 进程中的每个线程是否总是有一个调用堆栈?即,线程不共享调用堆栈?

  2. 每个调用堆栈的大小是否固定?或者每个线程可以不同吗?

  3. 让我们假设我们自己做所有事情并用汇编编写我们的程序。调用栈是不是神奇地给了我们?还是我们必须自己实施?

  4. 如果我们在汇编中编写程序,我们是否会保留一些内存并将调用堆栈内存起始地址设置为 ESP 以进行设置?

-迈克尔

4

1 回答 1

3

1)每个线程都有自己的堆栈 - 几乎按照定义。

2) 最大堆栈大小是一个进程限制,在标题中指定。初始线程堆栈大小是线程创建参数 - 请参阅 CreateThread() API。

3)操作系统管理所有内存。新线程的堆栈由内核在线程创建时动态分配,堆栈顶部填充有堆栈帧,除其他外,允许线程通过以类似于中断的方式弹出帧来开始执行 -返回。不要试图在家里这样做。

4)不!导入并调用 CreateThread() API。

于 2012-05-06T19:15:23.593 回答