linux - 一个进程中线程的总堆栈大小

标签 linux stack pthreads

我使用 pthreads_attr_getthreadsizes() 获取一个线程的默认堆栈大小,在我的机器上为 8MB。

但是当我创建 8 个线程并为它们分配非常大的堆栈大小(比如数百 MB)时,程序崩溃了。

所以,我想,应该

("Number of threads" * "stack size per thread") < a constant value (e.g. virtual memory size)

?

最佳答案

简短的回答是"is"。

更长的答案是所有线程共享一个虚拟地址空间,因此该空间的用户空间可用部分必须足够大以包含所有线程堆栈(以及代码、静态数据、堆、库以及任何杂项映射)。

数百兆字节的堆栈是您做错事的一个很好的指示,正如他们在经典中所说的那样。

关于linux - 一个进程中线程的总堆栈大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2870836/

相关文章:

c - 使用 `SIGCHLD` 忽略 `sigaction(2)` 信号有什么用?

c++ - 何时以及如何使用 GCC 的堆栈保护功能?

delphi - 从 DLL 的映射文件中获取源行号

c - 当我将数组扔给 pthread 时我得到了错误的值

linux - 如何从 Windows 创建 PEM 文件

php - 使用 PHP 控制用户输入的 Javascript/HTML/textarea 并防止 iframe hack

c++ - C++段错误中的命令行参数

c++ - 在堆栈上分配的变量上调用 delete

linux - 如何防止 pthreads 中读写锁中的写入器饥饿

c - 为什么在以下代码中将结构传递给线程会导致段错误?