C++ malloc未分配指定的内存(64位)

C++ malloc未分配指定的内存(64位),c++,visual-c++,visual-studio-2008,memory-management,windows-server-2008,C++,Visual C++,Visual Studio 2008,Memory Management,Windows Server 2008,我的系统上有32 GB的RAM,我想在内存中读取并保存一个15 GB的文件。当我尝试执行以下代码时,输出是:nread=1073741824,它正好对应于1GB,而它应该读取对应于文件大小的字节 我甚至检查了运行系统资源管理器,这增加了1GB,这意味着malloc没有像预期的那样分配17GB的空间 对于64位系统,我可以读取高达8TB的32位系统,它是2GB或更具体的1.5GB 我在64位机器和OS上,我已经配置Visual C++来构建和执行64位二进制文件,按照下面给出的步骤:[通过检查in

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

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

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

我在64位机器和OS上,我已经配置Visual C++来构建和执行64位二进制文件,按照下面给出的步骤:[通过检查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 = %d\n", nRead);

    int a;
    scanf("%d" ,&a);
    return 0;
}
问题是17*1024*1024*1024是int类型的文本,而int在Windows上是四个字节宽的。您认为int在64位窗口中是8字节宽,这是完全错误的。不是。它有4个字节宽。显然,一个4字节的整数不能保存您希望输入的值

您需要使用64位整数文字:

17*1024*1024*1024ull
问题是17*1024*1024*1024是int类型的文本,而int在Windows上是四个字节宽的。您认为int在64位窗口中是8字节宽,这是完全错误的。不是。它有4个字节宽。显然,一个4字节的整数不能保存您希望输入的值

您需要使用64位整数文字:

17*1024*1024*1024ull

大小是整数,在64位Windows上,整数仍然是4字节。无法将其放入int。SIZE是int,而int在64位Windows上仍然是4字节。你不能把它放入一个整数中。哦,是的,整数的大小仍然是4字节。我认为它变为8字节的原因是-我实际上已经使用sizeofbuff检查了指针的大小,现在我明白了指针的大小必须增加,以便能够寻址大内存,它与int不同。哦,是的,int的大小仍然是4字节。我认为它变为8字节的原因是——我实际上已经使用sizeofbuff检查了指针的大小,现在我明白了指针的大小必须增加才能寻址大内存,它与int不同。