查看Linux系统栈空间大小

如果是gcc/linux的可执行文件,先用readelf看:
1、$ readelf -l /bin/ls
2、…
3、 Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align
4、…
5、GNU_STACK 0x000000 0x00000000 0x00000000 0x00000 0x00000 RW 0x4
6、…
如果MemSiz为零,则由OS决定栈的大小。
1、$ ulimit -a | grep stack
2、stack size (kbytes, -s) 8192
可以看到OS设定的值是8MB
编译时改变stack大小的方法:
ld –stack=栈尺寸

gcc -Wl,–stack=栈尺寸
例如 gcc -Wl,–stack=0x4000000

更改Linux默认栈空间的大小

  有时候在Linux写C++程序处理大量的数据,程序内部需要分配很大的数组来存放一些数据,但有时候分配的数组太大的话运行时会出现段错误。这种情况可能是分配的数组大小超过了Linux系统的默认栈空间的大小了,导致栈空间不够分配,出现错误。

(1)查看linux默认栈空间的大小
  通过命令 ulimit -s 查看linux的默认栈空间大小,默认情况下为8192 KB 即8MB。

(2)临时改变栈空间的大小
  通过命令 ulimit -s 设置大小值临时改变栈空间大小。例如:ulimit -s 102400,即修改为100MB。

(3)永久修改栈空间大大小。有两种方法:
  方法一:可以在/etc/rc.local 内加入 ulimit -s 102400 则可以开机就设置栈空间大小,任何用户启动的时候都会调用。
  方法二:修改配置文件/etc/security/limits.conf