简单的问题,我正在编写一个需要打开巨大图像文件 (8kx8k) 的程序,但我对如何初始化巨大数组以在 C++ 中保存图像感到有点困惑。
我一直在尝试这样的事情:
long long SIZE = 8092*8092; ///8096*8096
double* array;
array = (double*) malloc(sizeof(double) * SIZE);
if (array == NULL)
{
fprintf(stderr,"Could not allocate that much memory");
}
但有时我的 NULL 检查没有发现数组未初始化,知道为什么吗?
此外,即使在具有 12 GB RAM 的 x64 机器上运行,我也无法初始化超过 2 个或 3 个数组,知道为什么吗?
我真的希望不必使用数组的各个部分。欢迎任何帮助。
谢谢。
最佳答案
您没有遇到数组大小问题。 8K*8K也就是64M而已。即使是 64M double (sizeof==8) 也不是问题;那只需要 512 MB。现在,一个 32 位应用程序(无论它在何处运行)应该能够分配其中的一些。不是 8,因为操作系统通常需要为自己预留一些空间(通常略高于 2GB),当内存碎片化时有时甚至不到 3。
“malloc failed but didn't return NULL”的行为是一个 Linux 配置错误,由 # echo 2 >/proc/sys/vm/overcommit_memory
修复
关于C++ 数组大小 x86 和 x64,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1588131/