我最近一直在看电话堆栈。但是,我读过的所有示例和文章都是单线程的。我感兴趣的是调用堆栈在内存中的样子以及我们如何分析它。
很抱歉在一篇文章中包含了这么多问题。但是,当每个问题都相关时,为每个问题创建一个帖子似乎很麻烦。
我的问题是针对Windows x86的。 所以我遇到的问题是:
进程中的每个线程是否总有一个调用堆栈?即,线程不共享调用堆栈?
每个调用堆栈的大小是否已修复?或者每个线程可以有所不同吗?
让我们假装自己正在做所有事情并在汇编中编写程序。调用堆栈是否神奇地给了我们?或者我们是否必须自己实施?
如果我们在程序集中创建程序,那么我们是否保留一些内存并将调用堆栈内存起始地址设置为ESP以进行设置?
- 迈克尔
答案 0 :(得分:3)
1)每个线程都有自己的堆栈 - 几乎按定义。
2)最大堆栈大小是标题中指定的进程限制。初始线程堆栈大小是线程创建参数 - 请参阅CreateThread()API。
3)操作系统管理所有内存。新线程的堆栈由内核在创建线程时动态分配,堆栈顶部填充堆栈帧,除其他外,它允许线程以类似于中断的方式弹出帧来开始执行 - 返回。不要试图在家里这样做。
4)不!导入并调用CreateThread()API。