我在C语言中声明了一个结构体变量,其大小大于1024字节。运行Coverity(一种静态代码分析器应用程序)后,它报告说此堆栈变量大于1024字节,因此是错误的原因。
我想知道我是否需要担心这个警告?单个堆栈变量的最大限制是否真的存在?
谢谢, Che
在现代桌面上,除非函数是递归的,否则我不会担心1k的堆栈分配。如果您正在编写嵌入式代码或用于内部使用的代码,则会出现问题。在Linux内核中的代码仅允许64 KiB或更少的堆栈,具体取决于配置选项。
这篇文章关于栈大小非常有趣 http://www.embedded.com/columns/technicalinsights/47101892?_requestid=27362
是的,它取决于操作系统和其他一些因素。抱歉说得这么笼统。你可能还可以在gcc集合中挖掘一些用于测试栈大小的代码。
据我所见,C编译器(Turbo)为变量提供了最大64000k的大小。如果我们需要更多的空间,则将其声明为“huge”。
尝试使用大量的堆栈空间并不是一个好主意。
这里有一个链接到默认的gcc堆栈大小:http://www.cs.nyu.edu/exact/core/doc/stackOverflow.txt
此外,您可以指定--stack,xxxxx
来自定义堆栈大小,因此最好假设xxxxx
是一个小数字,并坚持使用堆分配。
堆栈、堆、低、高 VM——对于第一个线程,64位VM的顶部应该没有限制,因此似乎是gcc/c编译器的一个错误,对于本地自动“int x[2621440];”,我得到了SIGSEGV。编译器应该让第一个线程的堆栈增长,直到它碰到堆,在一个16亿亿字节的VM中,这是相当不可能的。最好的解释是称其为编译器的“限制”。(在一些测试中,可能是在Solaris SPARC上进行的测试,似乎本地变量的处理速度比全局变量快。)