繁体   English   中英

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

[英]malloc not allocating the specified memory (64 bit)

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

我什至检查了系统资源管理器的运行情况,并且增加了1GB,这意味着malloc并未按预期分配17 GB的空间。

在64位系统中,我最多可以读取8TB(在32位系统中,则为2GB或更多特定的1.5GB)。

我在64位计算机和OS上,并且已经按照以下给定的步骤配置了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*1024int类型的文字,而int在Windows上为四个字节宽。 您完全错误地认为int在64位Windows中为8字节宽。 不是。 它是4字节宽。 显然,一个4字节的整数不能保存您想要放入的值。

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

17*1024*1024*1024ull

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM