我正在编写一个需要大量内存的程序(大图分析)。
目前我的程序中主要有两个数据结构(占用了大部分内存)。它们是:
int **
类型的 n*n 矩阵
- 和长度为 n 的数组,类型为
Node *
在这种情况下,节点是一个包含两个整数的结构 (sizeof(Node)
= 8)
我可以运行我的代码的 n 的最大值是 22900,做一些计算我得到:
22900*22900 * sizeof(int) * 8 + 22900 * sizeof(Node) = 16782591360 位
这是 1.95375077 GB。
那么问题 1:我是否正确计算了这两个数据结构的内存使用量? 和 2:Windows 上是否有 2GB 的内存分配限制。如果是这样,我该如何解决?
有关更多信息,我在一台使用 GCC 编译的 64 位 Windows 7 机器上,运行时有 4GB RAM 和 ~3GB 空闲 RAM。
谢谢。
最佳答案
您没有正确计算它。首先,没有理由将任何东西乘以 8。C 中的分配量是字节,而不是位。其次,您忽略了实现矩阵第一维的指针数组。所以:
22900 * sizeof(int*) + 22900*22900*sizeof(int) + 22900*sizeof(Node) = 2097914800 bytes
至于有用的建议,我会留给(已经发布的)其他答案。
关于c - Windows 中的内存分配限制 + 我是否正确计算?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6683843/