x64 では、malloc() によって 1.9G を超えるメモリを取得できませんが、私の物理メモリは 8G です。これはなぜですか?
質問する
2366 次
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 に答える