【问题标题】:How many stacks does a windows program use?windows 程序使用多少堆栈?
【发布时间】:2011-04-24 09:47:15
【问题描述】:

返回地址和数据是混合/存储在同一个堆栈中,还是在 2 个不同的堆栈中,是这样吗?

【问题讨论】:

    标签: windows assembly stack


    【解决方案1】:

    它们是混合的。但是,这取决于实际的编程语言/编译器。我可以想象一个编译器在堆上为局部变量分配空间,并在堆栈上保留一个指向存储的指针。

    每个进程中的每个线程都有一个堆栈。因此,例如,一个有 20 个线程的进程有 20 个独立的堆栈。

    【讨论】:

      【解决方案2】:

      正如其他人已经指出的那样,它主要是一个单一的混合堆栈。我将只添加一个小细节:相当新的处理器也有一个小的返回地址缓存,它存储在处理器本身中,它只存储返回地址,而不存储其他数据。但是,除了更快的执行之外,它几乎是不可见的......

      【讨论】:

        【解决方案3】:

        这取决于编译器,但由于 push 和 pop 指令使用单个堆栈指针工作的方式,x86 架构面向单个堆栈。编译器将不得不做更多的工作来维护多个堆栈。

        【讨论】:

          【解决方案4】:

          另外注意:Win32 中的每个线程都有自己的堆栈。所以,当你告诉“windows 程序”时——这取决于它有多少线程。 (当然线程是在运行时创建/退出的)。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-01-26
            • 1970-01-01
            • 2015-05-01
            • 2016-09-19
            • 2017-01-11
            • 2018-05-02
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多