Sun Studio 12:C 用户指南

STACKSIZE

正在执行的程序会为主线程保留一个主内存栈,同时为每个从属线程保留不同的栈。栈是临时内存地址空间,用来存储子程序调用中的参数和自动变量。

主栈的缺省大小约为 8 兆字节。使用 limit 命令显示当前主栈大小并对其进行设置。


% limit
cputime unlimited
filesize unlimited
datasize 2097148 kbytes
stacksize 8192 kbytes <- current main stack size
coredumpsize 0 kbytes
descriptors 256
memorysize unlimited
% limit stacksize 65536 <- set main stack to 64Mb

多线程程序的每个从属线程均具有其自身的线程栈。该栈与主线程的主栈相似,但对该线程是唯一的。线程的私有数组和变量(对于线程是局部的)在线程栈中进行分配。

所有从属线程的栈大小都相同,缺省情况下,对于 32 位应用程序为 4MB,对于 64 位应用程序为 8MB。可以用环境变量 STACKSIZE 来设置该大小:


% setenv STACKSIZE 16483 <- Set thread stack size to 16 Mb

对于某些已并行的代码,可能需要将线程栈大小设置为比缺省值大的值。

有时,编译器会生成一条警告消息,指出需要更大的栈大小。然而,除了通过尝试并出错之外,不可能知道应设置多大的栈大小正合适,尤其是涉及私有/局部数组时。如果栈太小导致线程无法运行,程序将异常终止并出现段故障。