0

だから、タイトルは私に答えるために必要なほとんどすべてを説明しています。もう1つだけです。私が開発しているアプリはUbuntuAppShowdownの一部であるため、デフォルトでPythonがインストールされているライブラリについて返信してください。

Python 2.7、Ubuntu12.04を実行しています。

4

1 に答える 1

1

計算がほぼ不可能で、価値がほとんどない数値を求めています。

一定期間実行されているLinuxシステムでは、「無料の」RAMはほとんど利用できません。ただの猫/proc/meminfo-MemFreeエントリは通常、ほんの数メガバイトのオーダーです。

それで、その記憶はどこに行きましたか?

カーネルは、初心者のために、すべてのディスクアクセスをキャッシュします。これは通常、Cachedエントリに表示されます。より多くのメモリが必要になるとディスクキャッシュが削除されるため、その数をに追加できMemFreeます。

ただし、アプリケーションが(malloc()Cで)2ギガバイトを正確に2ギガバイトのRAMを搭載したシステムに割り当てる場合、通常はそれが許可されます。つまり、有効なポインターが返されます。ただし、RAMは実際にはアプリケーション用に予約されていません。これは、アプリケーションがメモリページにアクセスし始めたときにのみ発生します。タッチされた各ページが割り当てられます。あなたが求めることができる最大サイズはとして利用可能ですCommitLimit

ただし、アプリケーションコード自体もRAMにない可能性があります。バイナリファイルとライブラリはmmapp()されているため、タッチされたページのみがRAMにロードされます。

次のようなツールを実行するtopと、VIRT、RES、SHRなど、プロセスごとにあらゆる種類のメモリ情報を取得できます。

  • VIRTは「仮想」用です-アプリが要求したすべてのページを要求する場合にアプリが必要とするすべてのメモリページ。
  • RESは「常駐」です-実際に使用されるメモリの量
  • SHRは「共有」されます。たとえば、複数のアプリケーションにロードされるライブラリなど、他のアプリケーションと共有されるページの量です。

では、使用可能なメモリの量を知ることの価値は何ですか?システムよりもはるかに多くのRAMを必要とする可能性のあるアプリケーションを起動できますが、それでも実行されます...アプリケーションを2回または3回実行できる場合もあります-コードページはとにかく共有されます...

注:上記の回答はかなりの数のコーナーをカットします。実際のメカニズムはかなり複雑です。そして、私はスワップスペースをストーリーに取り入れ始めていません。しかし、これはあなたのためになります、私は願っています...

于 2012-06-23T15:55:04.493 に答える