4d4*_*143 3 c memory callstack variable-declaration
考虑到C中函数内部的局部变量一旦被调用就会被压入堆栈(在压入传递给函数的变量之后),在堆栈缓冲区溢出之前,所述变量的数量是否有限制?或者该限制仅由确定的主机拥有的 RAM 量决定?
我尝试通过创建一个 4,6gb .C 文件来测试这一点,其中包含一个函数,该函数声明了 25000*13 个变量并将其初始化为 0。该函数在内部调用,main()但它编译得很好(使用 -O0)并且没有'崩溃。
例如根据 C 标准(5.2.4.1 翻译限制)
\n\n\n1 实现应能够翻译和执行至少\n一个程序,该程序至少包含\n以下每一项限制的一个实例:
\n\xe2\x80\x94 一个翻译单元中有 4095 个外部标识符
\n\xe2\x80\x94 511 个标识符,其块作用域在一个块中声明
\n