Segmentation-Fault
使用 pthread 的無限堆棧大小
我的預設堆棧大小(根據 ulimit -s)是 8192 kB,所以當我嘗試執行它時,下面的程式碼自然會出現段錯誤。此外,自然地,如果我執行“ulimit -s 9000”,它也可以正常工作。但是,當我執行“ulimit -s unlimited”時,程式碼會再次出現段錯誤。有什麼想法嗎?
如果有用,我正在執行核心 4.19.0-6 和 gcc 版本 Debian 8.3.0-6 的 Debian 10。
#include <iostream> #include <unistd.h> #include <cstdlib> void* wait_exit(void*) { char bob[8193*1024]; return 0; } int main() { pthread_t t_exit; int ret; if((ret = pthread_create(&t_exit,NULL,wait_exit,NULL)) !=0) { std::cout<<"Cannot create exit thread: "<<ret<<std::endl; } std::cout<<"Made thread"<<std::endl; sleep(5); return 0; }
因為對於執行緒“無限”在 x86_64 上只為您提供 2 MiB,請參閱
pthread_create
手冊頁:If the RLIMIT_STACK resource limit is set to "unlimited", a per-architecture value is used for the stack size. Here is the value for a few architectures: ┌─────────────┬────────────────────┐ │Architecture │ Default stack size │ ├─────────────┼────────────────────┤ │i386 │ 2 MB │ ├─────────────┼────────────────────┤ │IA-64 │ 32 MB │ ├─────────────┼────────────────────┤ │PowerPC │ 4 MB │ ├─────────────┼────────────────────┤ │S/390 │ 2 MB │ ├─────────────┼────────────────────┤ │Sparc-32 │ 2 MB │ ├─────────────┼────────────────────┤ │Sparc-64 │ 4 MB │ ├─────────────┼────────────────────┤ │x86_64 │ 2 MB │ └─────────────┴────────────────────┘