至於pthread_create(3)手冊頁說:
「在Linux/X86-32,對於一個新的線程默認堆棧大小是2兆字節」,除非RLIMIT_STACK
資源限制(ulimit -s
)設置:在在這種情況下,「它確定了新線程的默認堆棧大小」。
您可以通過getrlimit(2)檢索RLIMIT_STACK的當前值檢查這一事實,如下面的程序:
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/resource.h>
int main()
{
/* Warning: error checking removed to keep the example small */
pthread_attr_t attr;
size_t stacksize;
struct rlimit rlim;
pthread_attr_init(&attr);
pthread_attr_getstacksize(&attr, &stacksize);
getrlimit(RLIMIT_STACK, &rlim);
/* Don't know the exact type of rlim_t, but surely it will
fit into a size_t variable. */
printf("%zd\n", (size_t) rlim.rlim_cur);
printf("%zd\n", stacksize);
pthread_attr_destroy(&attr);
return 0;
}
這些結果時試圖運行它的命令行(編譯a.out
) :
$ ulimit -s
8192
$ ./a.out
8388608
8388608
$ ulimit -s unlimited
$ ./a.out
-1
2097152
$ ulimit -s 4096
$ ./a.out
4194304
4194304
除此之外,linux在需要時會自動生成堆棧 - 但是您的目標受限於這些限制,以及可擴展區域中可用地址空間的限制。 – nos 2010-02-26 08:56:05
nos,僅適用於主線程,不是嗎? – osgx 2011-08-25 19:43:18