windows和linux中程序栈空间

来源:互联网 发布:舞蹈软件下载 编辑:程序博客网 时间:2024/04/26 22:16

        一般来说,我们所用的内存有栈和堆之分,其它的我们很少控制,栈的速度快,但是空间小、不灵活;而堆的空间几乎可以满足任何要求、灵活,但是相对的速度要慢了很多,并且在VC中堆是人为控制的,new了就要delete,否则很容易产生内存泄露等问题。

系统     栈的字节数    bits   digits                 以兆为单位的值

Linux     8192K bytes    <=62407 <=18786                     linux默认8M(我的好像是10M)

Windows   1024K bytes    <=10581 <=3185  (Release Version)   windows默认1M

一、VC++程序栈空间的大小

      VC++默认的栈空间是1M,有两个方法更改:

   a. link时用/STACK指定它的大小,或者在.def中使用STACKSIZE指定它的大小【link选项】

   b. 使用控制台命令“EDITBIN”更改exe的栈空间大小。

   方法一:STACKSIZE   定义.def文件
       语法:STACKSIZE reserve[,commit]
      reserve:栈的大小;commit:可选项,与操作系统有关,在NT上指一次分配物理内存的大小
   方法二:设定/STACK
      打开工程,依次操作菜单如下:Project->Setting->Link,在Category 中选中Output,然后在Reserve中设定堆栈的最大值和commit。
       注意:reserve默认值为1MB,最小值为4Byte;commit是保留在虚拟内存的页文件里面,它设置的较大会使栈开辟较大的值,可能增加内存的开销和启动时间。

二、Linux下程序栈空间的大小

    linux下非编译器决定栈大小,而是由操作系统环境决定;而在Windows平台下栈的大小是被记录在可执行文件中的(由编译器来设置),即:windows下可以由编译器决定栈大小,而在Linux下是由系统环境变量来控制栈的大小的。

     在Linux下通过如下命令可查看和设置栈的大小:

    命令: ulimit -a      # 显示当前栈的大小 (ulimit为系统命令,非编译器命令)       

     命令: ulimit -s 32768      # 设置当前栈的大小为32M bytes