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

问题描述 投票:-6回答:3

这个问题在这里已有答案:

我尝试使用10 ^ 6乘10 ^ 6阵列,它给我分段故障

c++ multidimensional-array c++14 dynamic-programming
3个回答
6
投票

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

如果您正在使用动态存储持续时间(使用newnew[]),那么限制要高得多。

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


3
投票

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

由于1012个四字节(例如int-s)的数量每个都需要4TB。添加所有这些可能需要一个或几个小时(因为典型的操作需要一纳秒)。

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

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

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


1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.