我正在编写一个需要大量内存(大型图形分析)的程序。
当前,我的程序中有两个主要的数据结构(占用了大部分内存)。这些是:
int **
类型的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
至于有用的建议,我将其留给(已发布)其他答案。