我们可以在c ++编程中使用的二维数组的最大大小是多少?

时间:2018-03-01 11:42:24

标签: c++ multidimensional-array c++14 dynamic-programming

我尝试使用10 ^ 6×10 ^ 6阵列,它给我分段错误

3 个答案:

答案 0 :(得分:6)

如果使用自动存储持续时间声明数组,则大小限制非常小,约为1Mb。

如果您正在使用动态存储时长(使用newnew[]),那么限制会更高。

但是,对于你的巨大阵列(在我写作时),任何一个都是不够的!您可能能够实例化此等级的稀疏矩阵 - 请参阅Boost分布中的BLAS库。

答案 1 :(得分:3)

你需要一台至少有4TB内存的机器。你有这么贵的电脑(可能花费一百万欧元,或者至少几十万欧元)。

由于10个 12 ,所以四个字节的数量(例如n = 1e6; a = cumsum(randi(3,2,n),2); b = cumsum(randi(2,2,n),2); - s)每个需要4TB。添加所有这些可能需要一个或几个小时(因为典型的操作需要一个纳秒)。

如果你有一台普通的16 GB笔记本电脑,你最多只能有一个大约40000 * 40000个元素的方阵,例如: 1600万个元素(每个可能需要四个或八个字节;因为intsizeof(long)在我的Linux x86-64桌面上是8个字节)。

如果矩阵的大部分元素为零,则称为sparse matrix,并且您将使用不同的data structures来表示它。有许多与它们相关的资源(书籍,软件库,数学理论,编程技术,numerical analysis问题),您可以将您的职业生涯奉献给稀疏矩阵。

另请阅读hash-tablesdatabasesvirtual memorythrashing ......

答案 2 :(得分:1)

这完全取决于您的计算机的内存大小以及您的操作系统分配给您的进程的内存量。您可以在(执行)将过程提交到操作系统时请求您的过程需要多少内存。