现在的位置: 首页 > 综合 > 正文

修改 堆栈大小 普适性方案总结 (跨平台 windows linux 栈设置大小)

2013年12月07日 ⁄ 综合 ⁄ 共 936字 ⁄ 字号 评论关闭

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 

 

抱歉!评论已关闭.