为什么在函数中声明大型变量会产生stack overflow(堆栈溢出)?
我今天做程序,在一个函数里声明了两个变量数组:
double a[8][86400];
double b[7][86400];
但程序运行的时候就报错:Error 0xC00000FD:stack overflow
当我将变量改为:
double a[8][864];
double b[7][864];
后程序就没有了问题,请问为什么大型变量会导致stack overflow呢?
(毕竟一个变量占据的内存才有: 8*8*86400 = 5529600 Bytes = 5.27M Bytes 。两个变量才10MB左右,远远小于VC++默认的50MB)
问题点数:100、回复次数:4Top
1 楼ColderRain(一切尽在不言中)回复于 2005-02-28 12:52:41 得分 100
函数默认栈好像是2M(还是1M?),你已经超出了,应该new.在进程堆里分配内存.Top
2 楼THINK511()回复于 2005-02-28 13:00:41 得分 0
我查了MSDN中关于/Zm的讲解,原来那里面默认50M指的是compiler's memory allocation limit,即编译器的内存大小分配限制,不是我认为的函数堆栈大小。我搞清楚了,非常感谢!Top
3 楼hdqqq(小西瓜)回复于 2005-02-28 13:00:51 得分 0
线程运行的栈有大小限制的,你还是用 new 来分配好了.
Top
4 楼legendhui(秋天的叶子)回复于 2005-02-28 13:02:29 得分 0
8 cuoTop




