动态数组与静态数组的大小
Size of dynamic array vs static array
静态数组和动态数组的最大大小是多少?我认为动态数组没有限制,但为什么静态数组有大小限制?
StackOverflow.exe中0x011164A7的未处理异常:0xC00000FD: Stack overflow(参数:0x00000000, 0x00482000)
这看起来更像是一个运行时错误。更准确地说,是堆栈溢出。
在大多数地方,数组的大小只受可用内存的限制。然而,对堆栈分配对象的限制通常要严重得多。默认情况下,Windows为1Mb, Linux为8Mb。看起来你的数组和堆栈上的其他数据占用的空间超过了限制。
有几种方法可以避免此错误:
- 使此数组为
static
或在模块的顶层声明它。这样它将被分配在.bss
段而不是堆栈中。 - 使用
malloc
/new
显式地在堆上分配这个数组。 - 使用c++集合,如
std::vector
,而不是数组。 - 增加堆栈大小限制。在Linux上,这可以通过
ulimit -s unlimited
来完成。
数组的最大大小由程序可以访问的内存量决定。在32位系统上,指针可以寻址的最大内存量是2^32字节,也就是4gb。实际限制可能更少,具体取决于操作系统实现细节。
请注意,这与您拥有的物理内存量无关。即使在RAM少于1 GB的机器上,您也可以分配2 GB的阵列……它只是会很慢,因为大多数数组将在虚拟内存中,交换到磁盘。相关文章:
- C++17中函数模板中的静态数组初始化(MSVC 2019)
- 静态数组的自由动态数组
- 如何在C++函数中声明静态 2D 数组?
- 从另一个静态常量数组初始化静态常量数组(只需少量计算)
- 基于字节数组生成静态范围整数值
- 如何在C++中删除静态数组?
- 为什么 &a 和 c++ 中的静态数组相同?
- 为什么静态数组成员变量在调用对象的实例后不显示任何内容?
- C++ 返回指向函数内定义的静态数组的指针是否有效?
- 将在堆栈上声明的元素添加到静态数组
- const_cast静态数组以添加恒常性
- C++访问静态 constexpr 数组
- 初始化类中的静态 const 数组 - C++
- 将静态字符数组中的字符分配给动态分配的字符数组 - 访问冲突
- 动态分配的数组和静态数组之间的区别
- 如何在 C++ 中使用 NULL(或 0)初始化静态字符数组
- C++编译时使用 constexpr 字符数组指针分配静态数组?
- 我可以使用 constexpr 函数声明一个静态数组吗?
- 如何在静态函数中使用成员函数数组
- 具有大的2d数组:静态int与int