静态数组和动态数组的最大大小是多少?我认为动态数组没有限制,但为什么静态数组的大小有限?
答案 0 :(得分:4)
StackOverflow.exe中0x011164A7处的未处理异常:0xC00000FD:堆栈溢出(参数:0x00000000,0x00482000)
这看起来更像是运行时错误。更确切地说 - 堆栈溢出。
在大多数地方,数组的大小仅受可用内存的限制。但是,堆栈分配对象的限制通常要严格得多。默认情况下,Windows上为1Mb,Linux上为8Mb。看起来您的数组和堆栈中已有的其他数据占用的空间超出了限制。
有几种方法可以避免此错误:
static
或在模块的顶层声明它。这样,它将在.bss
段而不是堆栈中分配。malloc
/ new
在堆上显式分配此数组。std::vector
而不是数组。ulimit -s unlimited
答案 1 :(得分:0)
数组的最大大小取决于程序可以访问的内存量。在32位系统上,指针可以寻址的最大内存量是2 ^ 32字节,即4千兆字节。实际限制可能会更少,具体取决于操作系统实现细节。
请注意,这与您可用的物理内存的数量无关。即使在RAM大小小于1 GB的计算机上,您也可以分配2 GB阵列......它只会变慢,因为大多数阵列都在虚拟内存中,换成磁盘。