http://www.cnblogs.com/titer1/archive/2012/03/31/2427436.html
栈的大小可以修改的。在应用程序我们经常需要定义大的数组,数组定义成局部变量非静态变量,那么数组就会在栈上分配,当数组超过默认栈的大小时,会引起非常内存访问。那么如何修改系统默认的栈的大小呢。
一般,在Unix-like平台,栈的大小不是由程序自己来控制的而是由环境变量来控制的,所以就不能通过设置编译器(像gcc)的任何编译标志来设置栈的大小;
//66上面这种说法,是不是,改变了环境,只要不更改回来,所有的相关程序都会受影响。
//而windows 影响范围更小,可以只是当前程序。
//思考,待确认?
在windows平台下,栈的大小的信息是包含在可执行文件中的。它可以在Visual C++的编译过程中设置,但是在gcc中是不可行的。
//66待确认??gcc
也可以用Microsoft提供的一个叫作:”editbin.exe“程序来直接修改可执行文件的栈的大小。
在一般情况下, 不同平台默认栈大小如下(仅供参考)
SunOS/Solaris 8172K bytes (Shared Version)
Linux 10240K bytes
Windows 1024K bytes (Release Version)
AIX 65536K bytes
如果定义大数组的情况下,那就需要修改默认的栈大小,下面给出几个平台的修改方法:
1.SunOS/Solaris系统:
limit # 显示当前用户的栈大小
unlimit # 将当前用户的栈大小改为不限制大小
setenv STACKSIZE 32768 #设置当前用户的栈大小为 32M bytes
2.Linux系统:
ulimit -a #显示当前用户的栈大小
ulimit -s 32768 #将当前用户的栈大小设置为32M bytes
//66上面那个变量 在 淘宝博客 经常出现。
3. Windows (在编译过程中的设置):
1). 选择 "Project->Setting".
2). 选择 "Link".
3. 选择 "Category"中的 "Output".
4. 在 "Stack allocations"中的"Reserve:"中输栈的大小,例如: 32768