windows和linux中程序栈空间
一般来说,我们所用的内存有栈和堆之分,其它的我们很少控制,栈的速度快,但是空间小、不灵活;而堆的空间几乎可以满足任何要求、灵活,但是相对的速度要慢了很多,并且在VC中堆是人为控制的,new了就要delete,否则很容易产生内存泄露等问题。系统 栈的字节数 bits digits 以兆为单位的值Linux 8192K byte
一般来说,我们所用的内存有栈和堆之分,其它的我们很少控制,栈的速度快,但是空间小、不灵活;而堆的空间几乎可以满足任何要求、灵活,但是相对的速度要慢了很多,并且在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
更多推荐
所有评论(0)