在不同平台修改默认栈大小

60 篇文章 0 订阅
44 篇文章 1 订阅
在应用程序我们经常需要定义大的数组,数组定义成局部变量非静态变量,那么数组就会在栈上分配,当数组超过默认栈的大小时,会引起非常内存访问。那么如何修改系统默认的栈的大小呢。
一般,在Unix-like平台,栈的大小不是由程序自己来控制的而是由环境变量来控制的,所以就不能通过设置编译器(像gcc)的任何编译标志来设置栈的大小;在windows平台下,栈的大小的信息是包含在可执行文件中的。它可以在Visual C++的编译过程中设置,但是在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

3. Windows (在编译过程中的设置):

       1). 选择 "Project->Setting".
       2). 选择 "Link".
       3. 选择 "Category"中的 "Output".
       4. 在 "Stack allocations"中的"Reserve:"中输栈的大小,例如: 32768

如下图所示:


4. AIX系统:

root用户修改/etc/security/limits文件。在这个文件中添加相应的用户的一些限制,下面以tlq用户的栈大小要修改为64M为例进行说明:

Su –  root

Vi /etc/security/limits

文件的末尾添加如下:

tlq:

     fsize = -1

     core = 2097151

     cpu = -1

     data = -1

     rss = -1

     stack = 65536

     nofiles = -1

修改完之后,再退出系统,重新登陆。此时就可以用ulimit –a来查看static 大小,此时已经改为了65536K了。


转载自:http://myswirl.blog.163.com/blog/static/51318642201211341436611/

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值