2011-02-02 6 views
5

メモリが限られており、機能のようなスワップファイルがないAndroidで働いています。私は人々がアプリケーションのメモリマップされたファイルを使用する機能のようなスワップファイルを実装しているが、これはどのように動作するのか理解していないことを読んだことがあります。誰か知っていますか?メモリマップファイルをスワップファイルとして使用していますか?

私の考えでは、私のプログラムが20Mbと言ったサイズのint配列を使いたいのであれば、この配列のデータを20Mbファイルに作成し、現在私が読み書きする必要があるファイルの部分を透過的にメモリに持ち込みます。重大な要素は、私が読み書きするスペースが20Mbあるにも関わらず、一度にメモリの中のほんの一部しか記憶されていないということです(Androidアプリは〜24Mbのメモリに限られています)。

私はこれでJavaで作業したいと思っていますが、Cのソリューションも動作します。

編集:このメモリは、マップされたファイルのトリックは、ここで言及されているが、私はそれはjava.nio.MappedByteBufferを使用し、Javaではhttp://grammerjack.blogspot.com/2009/10/gles-quake-port-of-quake-to-android.html

+1

ファイルマップされたメモリをスワップしませんか? – ruslik

+0

Androidにスワップは設定されていません。アプリケーションが動作する方法のために、OSは、メモリが不足するとフォアグラウンドにないものを強制終了することができます。メモリマップファイルは、読み込み専用のデータ(ページは個別に破棄できます)に最適ですが、読み書きを共有してスワップに似た動作をさせることもできます。 – fadden

答えて

1

をどのように動作するかを理解していません。

Cでは、POSIX関数mmap()を使用します。それはAndroid上で動作します。

+1

マッピングのダーティ・ページをファイル・バックのままにするには、 'MAP_SHARED'フラグを' mmap() 'に指定する必要があることに注意してください。 – caf

+0

Javaには「メモリマップされたファイル」という機能があるので、私はこれとmmapの違いを混同しています。いずれにしても、一度にどれだけのファイルがメモリ内にあるのかをどのように制限するのですか?私は、どのくらいのメモリが使用されているかを良心的にする必要があり、mmapはマップするファイルのサイズを求めるようです。 20Mbファイルをすべて割り当てた場合、メモリには何が起こりますか? – rbcc

+0

あなたがクラスandroid.os.MemoryFileについて話しているなら、それはそうではありません - それは共有メモリです。システムが持つマッピングによってさらに多くのメモリを割り当てようとすると、mmapはエラーになります。ファイル全体をマップするかどうかはあなた次第です。 mmapは* file * sizeを要求しません - マッピングのサイズを尋ねるので、ファイル全体の一部だけをマッピングするオプションが与えられます。 –

関連する問題