0

在 x64 中,我通过 malloc() 无法获得超过 1.9G 的内存,但我的物理内存是 8G,为什么会发生这种情况?

4

1 回答 1

8

这很可能是因为您使用的是 32 位编译器、32 位操作系统或(可能)两者兼而有之。

我将您的代码简化了很多,如下所示:

#include <iostream>
#include <stdlib.h>

int main() {
    void *block = malloc(1024LL * 1024LL * 1024LL * 6);
    if (block)
        std::cout << "Allocated 6 Gig block\n";
    else
        std::cout << "Unable to allocate 6 Gig block.\n";
    return 0;
}

如果我用 32 位编译器编译它,它会失败(打印出“无法分配 6 Gig 块。”如果我用 64 位编译器编译它,它会成功(打印出“分配的 6 Gig 块”)。我没有方便的 32 位操作系统来测试它,但我有理由相信,使用 32 位操作系统,它也会失败(32 位可执行文件的行为与在 64-位操作系统,而 64 位可执行文件根本无法在 32 位操作系统上运行)。

Specs: 32-bit compilers tested: gcc 4.8.1 (MinGW), Microsoft VC++ 17.
64-bit compiler: VC++ 17.
OS: Windows 8 x64.
于 2013-06-26T06:30:22.957 回答