2

いくつかの大きなファイルを試しましmmapたが失敗しました:約2.7GBより大きいファイルをmmapできません。

を行うことulimit -aで、私の仮想メモリは無制限であると言います。次にcat /proc/meminfo、システムに3GBのMemfreeと2GBのSwapfreeがあると表示しました。

最大5GBのファイルをmmapできると想定しています。MAP_NORESERVEフラグを使用したり、に設定overcommit_memoryしたりするなど、インターネットで学んだことをすべて試しました1。それはまだ同じです、Cannot allocate memory。何がうまくいかない可能性がありますか?

私は64ビットCPUと32ビットLinuxシステムを使用しています。さらに情報が必要な場合はお知らせください。アドバイスやヒントをいただければ幸いです。

4

2 に答える 2

11

32ビットOSには十分なアドレス空間がないため、64ビットOSを使用する必要があります。
編集:システムには使用可能な物理メモリがありますが、32ビットプロセスは最大4GBまでしかアドレス指定できませんが、カーネルはカーネルドライバー用に約1〜2GBを予約します...したがって、ユーザースペースは通常32ビットアプリケーション用に2GBです。

于 2012-05-12T05:48:39.793 に答える
3

アプリケーションには、そのような大きなファイルをマップするのに十分なアドレス空間(使用可能なメモリアドレス)がないだけです。

Linuxでは、32ビットカーネルで実行される32ビットプロセスには通常約3GBのアドレス空間があり、64ビットカーネルで実行される32ビットプロセスには4GBのアドレス空間があります。それ以上が必要な場合は、アプリケーションを64ビットプロセスとしてコンパイルする必要があります。これにより、少なくとも128TBのアドレス空間が得られます。

于 2012-05-12T06:09:42.043 に答える