动态数组与静态数组的大小

时间:2014-05-31 11:44:57

标签: c++ c arrays

静态数组和动态数组的最大大小是多少?我认为动态数组没有限制,但为什么静态数组的大小有限?

2 个答案:

答案 0 :(得分:4)

  

StackOverflow.exe中0x011164A7处的未处理异常:0xC00000FD:堆栈溢出(参数:0x00000000,0x00482000)

这看起来更像是运行时错误。更确切地说 - 堆栈溢出。

在大多数地方,数组的大小仅受可用内存的限制。但是,堆栈分配对象的限制通常要严格得多。默认情况下,Windows上为1Mb,Linux上为8Mb。看起来您的数组和堆栈中已有的其他数据占用的空间超出了限制。

有几种方法可以避免此错误:

  1. 创建此数组static或在模块的顶层声明它。这样,它将在.bss段而不是堆栈中分配。
  2. 使用malloc / new在堆上显式分配此数组。
  3. 使用C ++集合,例如std::vector而不是数组。
  4. 增加堆栈大小限制。在Linux上,可以使用ulimit -s unlimited
  5. 完成

答案 1 :(得分:0)

数组的最大大小取决于程序可以访问的内存量。在32位系统上,指针可以寻址的最大内存量是2 ^ 32字节,即4千兆字节。实际限制可能会更少,具体取决于操作系统实现细节。

请注意,这与您可用的物理内存的数量无关。即使在RAM大小小于1 GB的计算机上,您也可以分配2 GB阵列......它只会变慢,因为大多数阵列都在虚拟内存中,换成磁盘。