栈上能分配多少内存?
使用ulimit -a
查看所有的limit。返回结果示意:
-t: cpu time (seconds) unlimited -f: file size (blocks) unlimited -d: data seg size (kbytes) unlimited -s: stack size (kbytes) 8192 -c: core file size (blocks) unlimited -m: resident set size (kbytes) unlimited -u: processes 7823 -n: file descriptors 1024 -l: locked-in-memory size (kbytes) 64 -v: address space (kbytes) unlimited -x: file locks unlimited -i: pending signals 7823 -q: bytes in POSIX msg queues 819200 -e: max nice 0 -r: max rt priority 0 -N 15: unlimited
从stack size (kbytes)
来看,我们最大能在栈上分配8192 KB内存。
如果我们在这个系统中运行一个这样的程序:
int main() {
int N = 16226304;
char buf[N];
return 0;
}
在运行时就会Segmentation fault,原因是这里需要在栈上分配15,846 KB的内存,超过了ulimit -s的限制。
这么大的内存,还是改成在堆上分配比较保险。
我们也可以使用ulimit -s
来查看和设置这个限制。返回结果:
8192