gpt4 book ai didi

c++ - malloc 未分配指定内存(64 位)

转载 作者:行者123 更新时间:2023-11-30 00:51:54 25 4
gpt4 key购买 nike

我的系统上有 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*1024int 类型的文字,而 int 在 Windows 上是四个字节宽。您错误地认为 int 在 64 位 Windows 中是 8 字节宽。它不是。它是 4 个字节宽。很明显,一个 4 字节的整数不能容纳您希望放入其中的值。

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

17*1024*1024*1024ull

关于c++ - malloc 未分配指定内存(64 位),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20422566/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com