0

x64 では、malloc() によって 1.9G を超えるメモリを取得できませんが、私の物理メモリは 8G です。これはなぜですか?

4

1 に答える 1

8

これは、32 ビット コンパイラ、32 ビット OS、または (おそらく) 両方を使用しているために発生する可能性が最も高いです。

これまで、コードをかなり単純化しました。

#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 ビット OS はありませんが、32 ビット OS でも同様に失敗するだろうと確信しています (32 ビット実行可能ファイルは、64-ビット OS であり、64 ビットの実行可能ファイルは 32 ビット OS ではまったく実行されません)。

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 に答える