线程中的堆栈大小在C++;? 我在我的源代码中使用C++和Windows .h。我在中阅读了CreateThread API,但仍然不理解指定堆栈大小的本质。默认值为1MB。但是如果我指定32字节,会发生什么呢
线程中的堆栈大小定义了什么线程中的堆栈大小在C++;? 我在我的源代码中使用C++和Windows .h。我在中阅读了CreateThread API,但仍然不理解指定堆栈大小的本质。默认值为1MB。但是如果我指定32字节,会发生什么呢,c++,multithreading,winapi,stack,C++,Multithreading,Winapi,Stack,线程中的堆栈大小定义了什么 请详细解释,我将不胜感激。谢谢。堆栈用于存储局部变量、在函数调用中传递参数、存储返回地址。线程的堆栈具有固定大小,该大小在创建线程时确定。这也是你所指的价值观 堆栈大小在创建线程时确定,因为它需要占用连续的地址空间。这意味着在创建线程时必须保留线程堆栈的整个地址空间 如果堆栈太小,则可能溢出。这是一种称为堆栈溢出的错误情况,该网站就是从中得名的。调用函数时,会发生以下部分或全部情况: 参数被推送到堆栈上 返回地址被推送到堆栈上 将创建一个包含函数局部变量空间的堆栈框
请详细解释,我将不胜感激。谢谢。堆栈用于存储局部变量、在函数调用中传递参数、存储返回地址。线程的堆栈具有固定大小,该大小在创建线程时确定。这也是你所指的价值观 堆栈大小在创建线程时确定,因为它需要占用连续的地址空间。这意味着在创建线程时必须保留线程堆栈的整个地址空间 如果堆栈太小,则可能溢出。这是一种称为堆栈溢出的错误情况,该网站就是从中得名的。调用函数时,会发生以下部分或全部情况:
- 参数被推送到堆栈上李>
- 返回地址被推送到堆栈上李>
- 将创建一个包含函数局部变量空间的堆栈框架李>
对于线程调用堆栈的确切含义有一个很好的描述堆栈大小只是在创建多个线程的能力和在其中一个线程中创建线程的可能性之间进行权衡
堆栈大小越大,可以创建的线程数越少,堆栈溢出的可能性越小。只有在要创建多个线程时,才应该担心堆栈大小(必须降低堆栈大小,但要记住堆栈溢出)。否则,默认值就足够了。您链接的页面有以下内容:有关更多信息,请参阅。请阅读您自己链接的文档。可能要求32字节的堆栈甚至不可能,最小大小应该是一个内存页(通常为4 KB)。与您的问题无关,但是当使用C++时,您应该调用而不是。文档中明确说明了这一点。有一种非常简单的方法可以找出发生了什么。试试看。作为参考,说明您需要使用_beginthreadex的文档已经过时了。如果您使用的是Vista或更高版本,并且您的VisualStudio版本还没有完全过时,CreateThread也可以工作。(幸运的是,因为你通常没有选择的余地!)曾经给我打分的人,请给出一个好的理由。要理解大小指的是什么,首先需要知道堆栈是什么。从这一点可以清楚地看出,尺寸指的是什么,不是吗?有什么更好的解释来解释什么是堆栈呢?也许只是我,但在第二段中,你似乎在说你必须保留整个进程的地址空间,也许你应该改写那句话。另外,添加一些示例可能会很有趣,您可能有兴趣为线程堆栈大小设置一个较低或较高的值。第二段看起来不错。它不一定为将来的实现保留的其他信息可能会比澄清更令人困惑。