malloc没有分配指定的内存(64位)

malloc not allocating the specified memory (64 bit)

本文关键字:内存 64位 分配 malloc      更新时间:2023-10-16

我的系统上有32 GB的RAM,我想读取并在内存中保留一个15 GB的文件。当我尝试执行以下代码时,输出为:"n read=1073741824",这正好对应于1GB,而它应该具有与文件大小相对应的读取字节。

我甚至检查了系统资源管理器的运行情况,结果正好增加了1GB,这意味着malloc没有像预期的那样分配17GB的空间。

对于64位系统,我可以读取高达8TB的数据(对于32位系统,它是2GB或更具体的1.5GB)。

我在64位机器和操作系统上,我已经配置了Visual C++,通过以下步骤构建和执行64位二进制文件:Intel Link[通过检查int的大小验证它是64位的-以前是4字节,现在是8字节]

为了分配和使用大于1GB的内存,我可以调整什么?

#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 = %dn", 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