我想运行一个有7个线程的进程,在linux系统中,每个线程的堆栈大小为8K (Fedora18)
在运行我的进程之前,我在终端中给出了以下命令
$ulmit -s 8 //Want to run my process and its threads each with 8K stack size
$./a.out // I started my process
在此命令系统挂起后,当我发出命令时没有response.But
$ulimit -s 16 //MY process successfully started.
当我尝试使用8K时,在设置8K之前,我已经将PTHREAD_STA
我了解到每个进程的默认堆栈大小限制在8MB以内,mmap_base是根据堆栈大小( rlimit和随机值)计算的。下面的代码是x86(linux/include/uapi/asm-generic/resource.h).中计算mmap_base地址的mmap_base函数
static unsigned long mmap_base(unsigned long rnd)
{
unsigned long gap = rlimit(RLIMIT_STACK);
if (gap < MIN_GAP)
gap = MIN_GAP;
else if (ga
关于pthread_attr_setstacksize 的手册页
A thread's stack size is fixed at the time of thread creation. Only the main thread can dynamically grow its stack.
我对linux线程的理解是,主线程堆栈的大小仅限于主线程创建上的ulimit -s值。虽然它可以根据堆栈使用的需要映射到virt,但其大小不再增长。
动态增长在这里意味着什么?这是否意味着主线程堆栈的大小可以超过ulimit -s