堆栈限制

如果数组定义成局部变量非静态变量,那么数组就会在栈上分配,当数组超过默认栈的大小时,会引起非常内存访问。
如果数组定义成全局变量或者局部静态变量,并且不初始化,数组在.bss段中分配,当程序加载时,由操作系统来完成。
如果数组太大,会造成程序无法加载,视系统不同,可能没有任何提示,也有可能提示内存空间不足。
如果数组定义成全局变量或者局部静态变量,并且初始化,数组在.data段中,由链接程序分配空间,当程序加载时,操作系统直接加载映像到内存或者使用内存映射技术。
如果数组太大,会造成程序无法加载,视系统不同,可能没有任何提示,也有可能提示内存空间不足。

不同平台的默认栈的大小如下:
platform                                                        default size        
===============================================================
        SunOS/Solaris                                8172K bytes                (Shared Version)
        Linux                                                         8172K bytes        
        Windows                                                        1024K bytes                (Release Version)
        cygwin                                                        2048K bytes        
        
        
        数组定义成局部变量非静态变量,那么数组就会在栈上分配,当数组超过默认栈的大小时,会引起非常内存访问。那么如何修改系统默认的栈的大小
        呢。
        一般说来,在Unix-like平台,栈的大小不是由程序自己来控制的而是由环境变量来控制的,所以就不能通过设置编译器(像gcc)的任何编译标志来设置栈的大小;
         
在windows平台下,栈的大小的信息是包含在可执行文件中的。它可以在Visual C++的编译过程中设置,但是在gcc中是不可行的。
也可以用Microsoft提供的一个叫作:”editbin.exe“程序来直接修改可执行文件的栈的大小。
        
        下面给出一些更详细的资料:
        
        
        SunOS/Solaris:
==============
        > limit                         # shows the current stack size
        > unlimit                 # changes the stack size to unlimited
        > setenv STACKSIZE 32768 # limits the stack size to 32M bytes
        
        Linux:
======
        > ulimit -a                # shows the current stack size
        > ulimit -s 32768        # sets the stack size to 32M bytes

Windows (在编译过程中的设置):
=============================
        1. Select "Project->Setting".
        2. Select "Link" page.
        3. Select "Category" to "Output".
        4. Type your preferred stack size in "Reserve:" field under "Stack 
           allocations". eg, 32768 in decimal or 0x20000 in hexadecimal.

Windows (修改可执行文件):
=======================================
There are two programs included in Microsoft Visual Studio, "dumpbin.exe"
and "editbin.exe".  Run "dumpbin /headers executable_file", and you can see 
the "size of stack reserve" information in "optional header values".  Run 
"editbin /STACK:size" to change the default stack size. 
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值