問題タブ [virtual-memory]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
operating-system - ベラディの異常が理解できない
Belady's Anomaly は、FIFO ページ置換ポリシーを使用すると、ページ スペースを追加するとページ フォールトが増えると述べています。
私の直感では、ページ スペースを追加するのと同じ数のページ フォールトを減らすか、多くても同じ数にする必要があります。
FIFO キューをパイプと考えると、ページ スペースを追加することは、パイプを大きくすることに似ています。
では、なぜページ フォールトが増えるのでしょうか。私の直感では、パイプが長いと、ページ フォールトが発生し始めるまでに少し時間がかかります (したがって、無限のパイプを使用すると、ページ フォールトは発生しません)。多くの場合、より小さなパイプと同様です。
私の推論のどこが間違っていますか?
operating-system - MMU はオペレーティング システムと物理メモリの間のすべてを仲介しますか、それとも単なるアドレス トランスレータですか?
特定の仮想メモリ アドレスに何らかの値を割り当てたいときに、オペレーティング システムがどのように機能するかを理解しようとしています。
私の最初の質問は、MMU が CPU と RAM の間のすべてを処理するかどうかに関するものです。これは本当ですか?ウィキペディアから読み取ることができるものから、私はそう言うでしょう:
ページ メモリ管理ユニット (PMMU) とも呼ばれるメモリ管理ユニット (MMU) は、CPU によって要求されたメモリへのアクセスを処理するコンピュータ ハードウェア コンポーネントです。
その場合、たとえば 8 バイト、64 バイト、または 128 バイトを取得する必要があることを MMU に伝えるにはどうすればよいでしょうか? 書くことはどうですか?
そうでない場合、MMU は単に仮想アドレスを物理アドレスに変換していると思いますか?
ページ フォールトと呼ばれるものがあることを MMU が検出するとどうなるでしょうか。CPUがページ自体をディスクからロードするようにCPUに指示する必要があると思いますか、それともMMUがこれを実行できますか?
ありがとう
java - Javaで仮想メモリで400Mを使用しているのは何ですか?その使用量を減らすにはどうすればよいですか?
簡単なプログラム:
それで
OpenJDK 1.6.0_20の場合、これは私のマシンで600Mの仮想メモリを使用します。つまり、「top」は「VIRT」600MとRES10mを示しています。(私はUbuntu 10.04、32ビットまたは64ビットを使用しています)。
SunのJava1.6.0_22の場合、400Mの仮想メモリを使用します。
そのすべての仮想メモリを使用しているのは何ですか?また、その使用量を減らすにはどうすればよいですか?
完全な「javaバージョン」:
OpenJDK:
太陽:
編集:
どちらのパッケージからもjavacを使用してコンパイルしても、役に立たないようです。
使用済みメモリを印刷するためのコードの追加は次のとおりです。
ショー
太陽:
OpenJDK:
-Xmx5mでも、最小値が必要ですか?以前にデフォルトについて読んだことがあります(jvm、仮想マシン、デフォルトでは物理メモリの4分の1の一般的な戦略に依存します)が、それが大量の仮想メモリの使用を引き起こし、それを減らすことはできませんか?
編集#2:
-Xmxを追加すると、状況が変わります。
OpenJDK:
いずれかのJVMに「のみ」150Mの仮想メモリを使用します。
編集#3:
nos、bestsss、Mikaveli、およびおそらく他の人は、仮想メモリはスワップを使用しないと指摘しました。nosは、OOMキラーは実際のメモリ使用量で十分に賢いと主張しています。これらのことが当てはまる場合、仮想メモリの使用量は気にしないと思います。RES(レジデントサイズ)が小さいのでいいです。
編集#4:
どちらの答えを受け入れるべきかわからない。これらのいずれかが答えとして表示された場合:「仮想メモリは安価なので心配しないでください」またはJavaが-Xmxまたは-Xmsを指定しても、仮想メモリに少なくとも150Mを予約する理由の説明実際のメモリ使用量はごくわずかですが。
編集#5:
これは重複です。私は閉じることに投票しました。
linux - Linux sk_buffでは、skb-> dataは物理アドレスですか、それとも仮想アドレスですか?
組み込みシステム用のイーサネットドライバのメモリ破損の問題を調査しています。
バスマスタリングDMAコントローラと低速SDRAMの間に問題があるのではないかと思います。そのため、高速SRAMでバウンスバッファを使用したいと思います。これを行うには、2つのことが必要です。SRAMの物理アドレス(バスマスターの観点から)をDMAコントローラーバッファー記述子に配置する必要があります。DMAコントローラーが報告したら、バウンスバッファーからSDRAMのsk_buffにデータをmemcpyする必要があります。着信パケット。
読んでから私が判断できなかったこと
skb->dataが物理アドレスか仮想アドレスかです。つまり、私は呼び出す必要があります
また
パケットをsk_buffに入れて、残りのLinuxネットワークスタックがそれを処理できるようにしますか?
編集:これは問題のドライバーです。仮想アドレスをDMAコントローラーレジスタに渡しているため、機能しないと思いますが、このコードが機能する開発キットがあります。ただし、私のSDRAMはdevkit DDR SDRAMほど良いタイミングではないので、バウンスバッファを実装することを考えています。
windows - Windows アプリに独自のファイル キャッシュを実装する意味はありますか?
28 バイト レコードのデータファイルを参照する Delphi アプリがあります。ファイルは順次書き込まれますが、ランダムに読み取られます。データファイルは N 個の物理ファイルに分割され、ディスクの問題に対する保険を提供するために 10 MB 程度でロールオーバーされます。これは、最新のファイルにのみ書き込みを行うためです。大きくなることを許されました。起動時に、ファイル セット全体を読み取り、インデックスを作成して、与えられた仮想レコード番号からどのファイルを探すべきかをすばやく知ることができます。
N 個のファイルへの分割の一環として、読み取りキャッシュを実装しました。Windows が独自にかなりの量のキャッシュを実行していることに気付きました。自分とディスク ファイルの間に別のキャッシュを追加することで、何か得られるのではないかと思います。
どんな考えでも大歓迎です。
windows - #pragma alloc_text(PAGE、functionname)
このコードは通常、デバイスドライバーで使用されます。foo
関数は
、システムが必要なときにいつでも交換されます。
質問。
- ユーザースペースコードで機能しますか?関数もページングされますか?
- プラグマがない場合、つまり、デフォルトでは、すべてのカーネルレベルの関数に非ページメモリが割り当てられていますか?
- PEファイルローダーは関数が割り当てられる場所を決定しますか?
linux - Linuxでの共有ライブラリのロードアドレス
共有ライブラリについて大きな疑問があります。私が研究したのは、異なるプロセスで共有されるライブラリの仮想アドレスは、これらすべてのプロセスで同じになるということです。しかし、私は次の一連のコマンドを介してprocファイルシステムを使用して同じことを調べようとしました:
出力は次のとおりです。
プロセスごとに同じ共有ライブラリの仮想アドレスは異なります。
なぜこんな感じなのか説明してもらえますか?
android - setContentView(R.layout.somelayout) を単純に実行しているときにメモリ リークが発生するのはなぜですか?
私の onCreate() では、アクティビティのコンテンツ ビューとして単純に xml を使用しています。なぜメモリリークが発生するのですか?それは私が間違っていることですか?
私のxmlには、5つの画像ボタンがあり、各画像ボタンにstatelistdrawable(セレクター)があります。各画像のサイズはわずか 16kb です。(だから私は10枚の画像を使用しています - 各ボタンの押された状態の画像と通常の状態の画像です)。
私のアクティビティのどこにも LayoutInflator を使用していません.xml からコンテンツ ビューを設定するときに、Android は独自に bimaps をリサイクルすべきではありませんか?
次のようなエラーが発生します。
画像を置き換えたところ、アプリケーションがハングアップすることなくコードが機能しましたが、ddms ログに次のエラーが記録されていました。
.. . . . .
アプリは動作していますが、何が間違っているのか知りたいです。それともバグのあるAndroidシステムのバグですか?
コードの添付:
レイアウト home.xml:
セレクターは次のとおりです:(custombutton1.xml)
アクティビティから他のすべてのコードを削除して、メモリ リークが発生しているかどうかを確認しました。しかし、ここでコンテンツビューをレイアウトファイルとして設定していますが、それでも私のddmsはVMが270000バイトを割り当てられないと言っています
ここでアクティビティのライフサイクルを管理しようとしたとは思いません。
macos - OSXで「マップされたファイル」のサイズをプログラムで取得するにはどうすればよいですか?
'vmmap'(またはInstrumentsのAllocationsツール)を使用すると、出力行の1つが'マップトファイル'になります。プログラムでこの番号を取得するにはどうすればよいですか?
vmmap出力:
visual-c++ - 物理メモリと仮想メモリのビジュアルC ++の違いは?
カスタムメモリマネージャーを作成しようとしていますが、現在、次のようなバイトのグローバル配列を割り当てています:
その後、Windows 7 のリソース モニターを見ると、約 512 MB の仮想メモリが割り当てられていることが報告されています。物理メモリを取得できない理由を誰かが説明してもらえますか? 代わりに malloc() を使用すると、物理メモリが得られます。私は何か間違ったことをしていますか?その場合、Visual C++ で物理メモリを取得する正しい方法はありますか?