C++ 数组大小 x86 和 x64

标签 c++ arrays x86 64-bit dynamic-arrays

简单的问题,我正在编写一个需要打开巨大图像文件 (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/

相关文章:

c++ - 如何在 C/C++ 源代码中公开 typedef?

c++ - 为什么显示 - -"cannot pass objects of non-trivially-copyable type"?

c++ - C/C++中的数组大小

C++ 指针数组为每个元素返回相同的值

c++ - 是否可以使用 Windows API 分配段?

c++ - xml解析的错误处理

c++ - 从 txt 文件中读取并删除第一行(或最后一行)而不复制

java - 如何将一个文件拆分为多个数组,显示它们,并对某些数组进行计算

assembly - nasm 指令和宏的缩进

c++ - 最快的仪器分析器是什么