我的系统上有 32 GB 的 RAM,我想读取一个 15 GB 的文件并将其保存在内存中。当我尝试执行以下代码时,输出为:“n read = 1073741824”,正好对应 1 GB,而它应该读取与文件大小对应的字节。
甚至运行系统资源管理器我也检查过,正好增加了 1GB,这意味着 malloc 没有按预期分配 17GB 的空间。
对于 64 位系统,我最多可以读取 8TB(对于 32 位系统,它是 2GB 或更具体的 1.5GB)。
我在 64 位机器和操作系统上,我已经配置 Visual C++ 以按照以下给出的步骤构建和执行 64 位二进制文件:Intel Link [通过检查 int 的大小验证它是 64 位——之前它是 4 个字节,现在是 8 个字节]
我可以调整什么以分配和使用大于 1 GB 的内存?
#include <stdio.h>
#include <cstdlib>
#define PATH "C:\\train"
#define SIZE 17*1024*1024*1024
int main()
{
FILE * fp = fopen(PATH, "r");
char* buff = (char*)malloc(SIZE);
int nRead = fread(buff, 1, SIZE, fp);
buff[nRead] = 0;
printf("n read = %d\n", nRead);
int a;
scanf("%d" ,&a);
return 0;
}
最佳答案
问题是 17*1024*1024*1024
是 int
类型的文字,而 int
在 Windows 上是四个字节宽。您错误地认为 int
在 64 位 Windows 中是 8 字节宽。它不是。它是 4 个字节宽。很明显,一个 4 字节的整数不能容纳您希望放入其中的值。
您需要使用 64 位整数文字:
17*1024*1024*1024ull
关于c++ - malloc 未分配指定内存(64 位),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20422566/