局部非静态的数组,空间在程序的栈上分配,不同平台的栈大小不同:SunOS/Solaris是8M,Linux是10M,Windows是1M,AIX是64M,都是可以调整的。
C99所谓的动态数组,其实分配在栈上,对那些Windows之外的平台,栈尺寸都比较大,所以不觉得有什麽,一般足够,但微软并不认为这是好主意,与其调整栈尺寸,不如在堆上分配更彻底(想象一下运行时接收了不合理的数组尺寸将有什麽结果就知道了,那已经在程序可控范围之外,超越了C是编译型语言的性质,事实上为了防这种错误,迫使程序员为此要写更多的即时检测代码),所以它不接纳这种标准(VC系列都不支持动态数组)。一般的建议,大数组,在堆上分配。
一般,在Unix-like平台,栈的大小不是由程序自己来控制的而是由环境变量来控制的,所以就不能通过设置编译器(像gcc)的任何编译标志来设置栈的大小;在windows平台下,栈的大小的信息是包含在可执行文件中的。它可以在Visual C++的编译过程中设置,但是在gcc中是不可行的。也可以用Microsoft提供的一个叫作:“editbin.exe”程序来直接修改可执行文件的栈的大小。
[
本帖最后由 TonyDeng 于 2013-6-11 00:25 编辑 ]