C中自动变量的大小限制是多少?

时间:2010-12-22 10:37:25

标签: c memory variables

  

可能重复:
  Checking available stack size in C

EDIT2:我的问题是重复Checking available stack size in C请删除。

编辑:我正在寻找有关大小限制的信息,而不是关于变量使用的一般信息。

可以确定尺寸限制吗?它是系统依赖的吗?

e.g。教科书经常写char字符串[1024];

但如果一个人愉快地写了字符串[99999999],他可能会崩溃。

4 个答案:

答案 0 :(得分:1)

由于自动变量位于堆栈上,因此它取决于堆栈大小的配置方式以及您拥有的嵌套调用次数。要分配MB,您应该考虑使用堆(malloc)

答案 1 :(得分:1)

这取决于很多因素(从unix机器的角度来看,写作)

  1. 堆栈段的ulimit。堆栈段的ulimit将确定可以为进程分配多少堆栈空间。
  2. 这个过程的一点点。即使堆栈的ulimit是无限制的,也有最大限制。 32位具有不同的最大堆栈大小,64位具有不同的最大大小。取决于操作系统架构和运行时环境。
  3. 机器中的可用内存。存在分页算法,其中在分配实际存储器时保留寻呼设备中的空间。如果没有空间,那么这个过程甚至都不会开始。
  4. 巨大的自动变量大小可能导致堆栈和堆冲突。
  5. 可能会有更多......但完全依赖于操作系统架构和运行时环境

答案 2 :(得分:0)

对于基本类型的变量,请转到:C Variables

否则使用链接列表等动​​态变量,或者根据要求使用。

编辑:在这种情况下,请使用@stracker 大小取决于运行此应用程序时的可用内存。

答案 3 :(得分:0)

我不知道这是否会对你有帮助。 您可以尝试查看limits.h(或通过此{{3br /> 你可能会从中获得一些东西。