【问题标题】:What is the maximum size of 2 dimensional array that we can use in c++ programming? [duplicate]我们可以在 C++ 编程中使用的二维数组的最大大小是多少? [复制]
【发布时间】:2018-08-09 11:32:13
【问题描述】:

我尝试使用 10^6 x 10^6 数组,它给了我分段错误

【问题讨论】:

  • 取决于您放置数组的位置。如果那个地方有足够的内存应该没问题,否则就不行了。
  • 好吧。即使每个元素只有一个字节,整个数组的大小也是 10¹²。您是否尝试在至少有 1000GB RAM 的机器上运行它?
  • 最大大小不取决于编程语言,而是取决于机器、其当前负载等:执行上下文。

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


【解决方案1】:

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

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

但是任何一个都不足以满足您的庞大阵列(在我撰写本文时)!不过,您也许可以实例化此等级的 稀疏矩阵 - 请参阅 Boost 发行版中的 BLAS 库。

【讨论】:

    【解决方案2】:

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

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

    如果您有一台 16 GB 的普通笔记本电脑,您最多可以拥有大约 40000 * 40000 个元素的方阵,例如16 亿个元素(每个元素可能占用 4 或 8 个字节;因为 sizeof(long)sizeof(double) 在我的 Linux x86-64 桌面上是 8 个字节)。

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

    另请参阅hash-tablesdatabasesvirtual memorythrashing...

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2021-10-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-26
        • 1970-01-01
        • 1970-01-01
        • 2012-11-10
        • 1970-01-01
        相关资源
        最近更新 更多