【问题标题】:what is maximum 3D array size in C [duplicate]C中的最大3D数组大小是多少[重复]
【发布时间】:2013-11-13 11:50:52
【问题描述】:

我正在用 C 语言制作一个 3D 数组程序。

当我输入[31][11][99] 时,代码运行良好。

但是当我输入[31][11][999] 时,代码没有运行。

是因为array size ??

如果是这个原因.. 那么 C 语言中 3D array 程序的最大数组大小是多少。

【问题讨论】:

  • 你真的需要给我们更多的信息。没有最大值,并且不是因为数组大小,无论“它”是什么。它编译了吗?
  • 我们需要看到代码才能评论。
  • 检查系统的最大堆栈大小,看看您的阵列是否超过它
  • 自动变量(堆栈分配)的存储限制是特定于实现的。从理论上讲,即使像int arr[10]; 这样小的东西也可能无法分配内存。但在实践中,如果您对堆栈帧大小有合理的了解,您应该没问题。更大的堆栈分配的问题是没有简单的方法来检测分配失败。如果您甚至认为您可能超过堆栈限制,您可能应该动态分配内存。相关:Why does C not define minimum size for an array?
  • 数组没有限制

标签: c multidimensional-array max-size


【解决方案1】:

这取决于您分配数组的位置。如果您在本地/静态分配它,则取决于可用的堆栈大小。为进程分配多少堆栈内存取决于特定的操作系统。

如果您用完堆栈空间,则会在运行时出现堆栈溢出。因此,您应该始终在堆上动态分配像这样的大型数组。

【讨论】:

    【解决方案2】:

    很有可能您的堆栈空间已用完。您可以使用ulimit -s 找出 Linux 上堆栈的大小,它为您提供了以 KiB 为单位的堆栈大小。您的数组将包含 340659 个元素。假设每个元素 4 字节为数组提供 1362636 字节。我机器上的堆栈大小是

    $ ulimit -s
    8192   # KiB
    

    您的第一个示例给出了 135036 KiB。 虽然原则上可以调整堆栈大小以满足您的需要,但最好在堆上为您的数组分配内存 (Memory allocation areas in C++ (Stack vs heap vs Static))。

    这里讨论了这样做的方法: Malloc a 3-Dimensional array in C?

    【讨论】:

      猜你喜欢
      • 2013-01-03
      • 1970-01-01
      • 2013-01-09
      • 1970-01-01
      • 2013-01-23
      • 1970-01-01
      • 2017-01-28
      • 1970-01-01
      • 2010-10-02
      相关资源
      最近更新 更多