【问题标题】:Call stack questions调用堆栈问题
【发布时间】:2012-05-15 10:40:11
【问题描述】:

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

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

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

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

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

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

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

-迈克尔

【问题讨论】:

    标签: windows x86 callstack


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2017-06-07
      • 2018-04-28
      • 1970-01-01
      • 1970-01-01
      • 2021-04-13
      • 1970-01-01
      • 2019-05-16
      • 2015-12-18
      • 1970-01-01
      相关资源
      最近更新 更多