2014-09-27 42 views
0

Ubuntu的为什么堆栈溢出不会发生?

ulimit -a 

core file size   (blocks, -c) 0 
data seg size   (kbytes, -d) unlimited 
scheduling priority    (-e) 0 
file size    (blocks, -f) unlimited 
pending signals     (-i) 62202 
max locked memory  (kbytes, -l) 64 
max memory size   (kbytes, -m) unlimited 
open files      (-n) 1024 
pipe size   (512 bytes, -p) 8 
POSIX message queues  (bytes, -q) 819200 
real-time priority    (-r) 0 
stack size    (kbytes, -s) 8192 
cpu time    (seconds, -t) unlimited 
max user processes    (-u) 62202 
virtual memory   (kbytes, -v) unlimited 
file locks      (-x) unlimited 

如上最大堆栈大小提到是8MB

#include <stdlib.h> 
#include <stdio.h> 
#include <string.h> 
int main() 
{ 
    int abc[2048002]; 
    memset(abc,0,2048002*4); 

} 

在上述程序中,我已分配超过8MB,即使在超过的堆栈大小(最大8MB),我没有收到分段错误。所以任何人都可以解释为什么我没有在上面的情况下获得堆栈溢出?

+1

你确定整个程序不只是优化了吗? – 2014-09-27 16:17:21

+1

除非您执行memset,否则未分配内存。做memset你应该得到堆栈溢出 – 2014-09-27 16:21:17

+0

1.约翰说,堆栈大小是8M而不是8K。 2. * nix系统实际上并不分配内存,除非您尝试访问(读取/写入)它。所以应该做memset或printf。 3.你正在'heap'上分配,而不是'stack' – texasbruce 2014-09-27 16:33:12

回答

2
stack size    (kbytes, -s) 8192 

这是8192千字节或8兆字节。

+0

所以你说如果他的数学是正确的话会冲击堆栈呢? – 2014-09-27 16:18:37

+0

哦,对不起。他的数学不只是一点点;它很多。 – 2014-09-27 16:20:03

+0

int abc [2048000],这意味着我们最多可以分配4 * 2048000个字节,如果我们超过一个字节多于它应该引发分段错误?但在我的情况下,这并没有发生。你能解释一下,为什么它不像我们增加一个字节超过最大限制 – NAVEEN 2014-09-27 16:47:15

相关问题