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

标签 c++ visual-c++ visual-studio-2008 memory-management windows-server-2008

我的系统上有 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/

相关文章:

winapi - CCombobox : how to set text color of Editable area text when combobox style is dropdown in win32

c++ - 当调用 Visual Studio 2008 的 build->clean/build->rebuild 时,如何添加另一个删除扩展?

c++ - 如何在 C++ 中更改静态数组变量的地址?

C++ 无法重新填充字符串流

c++ - __mm128 的 vector 不会 push_back()

c++ - 编译器在 GCC 和 MSVC 中生成析构函数和警告

c# - Visual Studio 在打开 *.aspx.cs 页面之前显示错误?

sql-server-2008 - LINQ2SQL : If I make changes to DB, 如何在 DBML 中镜像它们?

c++ - 在ov5640上使用V4L2设置ctrl

c++ - 模板递归不会停止