我正在编写一个需要大量内存(大型图形分析)的程序。

当前,我的程序中有两个主要的数据结构(占用了大部分内存)。这些是:

  • int **类型的n * n矩阵
  • 和长度为n的数组,键入Node *

  • 在这种情况下,节点是一个包含两个int的结构(sizeof(Node) = 8)

    我可以在其上运行代码的n的最大值是22900,我做了一些计算:
    22900*22900 * sizeof(int) * 8 + 22900 * sizeof(Node) = 16782591360 bits
    这是1.95375077千兆字节。

    问题1:我是否可以正确计算这两个数据结构的内存使用情况?
    和2:Windows上是否有2GB的内存分配限制。如果是这样,我该如何解决?

    有关更多信息,我使用的是64位Windows 7计算机,该计算机使用GCC,4GB RAM和运行时约3GB的可用RAM进行编译。

    谢谢。

    最佳答案

    您的计算不正确。首先,没有理由将任何东西乘以8。C中的分配量是字节,而不是位。其次,您忽略了实现矩阵第一维的指针数组。所以:

    22900 * sizeof(int*) + 22900*22900*sizeof(int) + 22900*sizeof(Node) = 2097914800 bytes
    

    至于有用的建议,我将其留给(已发布)其他答案。

    09-29 19:44