栈上能分配多少内存?

使用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
posted @ 2020-03-25 17:20  Midnightcat  阅读(619)  评论(0编辑  收藏  举报