考虑到C中函数内部的局部变量一旦被调用就会被压入堆栈(在压入传递给函数的变量之后),在堆栈缓冲区溢出之前,所述变量的数量是否有限制?或者该限制仅由确定的主机拥有的 RAM 量决定?
我尝试通过创建一个 4,6gb .C 文件来测试这一点,其中包含一个函数,该函数声明了 25000*13 个变量并将其初始化为 0。该函数在内部调用,main()但它编译得很好(使用 -O0)并且没有'崩溃。
main()
c memory callstack variable-declaration
c ×1
callstack ×1
memory ×1
variable-declaration ×1