問題タブ [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.

0 投票する
4 に答える
159 参照

windows - Windowsでメモリの一部を仮想ファイルとして使用することは可能ですか

コマンドライン ツールを使用してファイルを処理しています。問題は、このファイルをディスクに保存しないことです (セキュリティ上の理由から)。それで、Windowsでメモリの一部をコマンドラインツールからアクセスできる仮想ファイルとして使用して、実際の物理ファイルであるかのように使用できるかどうか疑問に思っていました。

0 投票する
1 に答える
237 参照

c - デマンドページングのコンテキストにおける謎の番号「63」

デマンド ページング システムを模倣するコードを実行しています。ここではいくつかのパラメーターを示します。

ページ フレーム数を 100 に設定して、FIFO またはランダム ページ置換アルゴリズムを使用してコードを実行します。ディスクの読み取り/書き込みは 63 で終了します。

次に、プロセッサ サイズを 32 ビットに変更すると、この境界は 16 に移動します。

後者の場合、わかりました。ページ フレーム カウントが可能なページ テーブル エントリ (2^4) よりも多い場合、エビクションの必要はありません。

しかし、前者の場合、ページ テーブル エントリが 2^20 になると、両方のページ置換アルゴリズムでディスクの読み取り/書き込みが 63 で停止する理由がわかりません。

この謎の63番とは?これはどこから来ているのでしょうか?ありがとうございました。

0 投票する
3 に答える
1661 参照

c++ - メモリマップトファイルstd::allocatorの実装により、WM6デバイスがフリーズします

WindowsMo​​bile6.x用のVisualStudio2008 C ++プロジェクトがあり、32MBのプロセススロットで使用できるよりも多くのメモリが必要です。そのため、メモリマップトファイルの使用を検討しています。new/deleteをCreateFileMappingMapViewOfFileに置き換える標準のアロケータ実装を作成しました。

使用目的は次のようなものです。

を使用すると、例外std::allocatorを取得する前に、その例で28197回の反復を取得できます。std::bad_allocを使用するMappedFileAllocatorと、デバイスが完全にフリーズして再起動する必要がある前に、32371回の反復が発生します。私のデバイスには512MBのRAMがあるので、そのループからはるかに多くの反復を取得できると期待していました。

私のMappedFileAllocator実装は次のとおりです。

誰かが私のMappedFileAllocator実装でどこが間違っているのかを提案できますか?

ありがとう、PaulH

0 投票する
2 に答える
2446 参照

c - HP-UX 上のプロセスが使用する仮想メモリを見つける C プログラム?

この質問はインタビューで私に尋ねられました:

  • Unix (HP-UX) で実行中のプロセスが使用する仮想メモリを見つける簡単な C プログラムを作成します。

私は彼らに、正確にはわからないと言いましたが、次のようなアイデアも思いつきました:

  • getpidシステムコールを使用してプロセスIDをstat取得し、それを使用して必要な出力を取得できる可能性があります
  • または、system関数呼び出しを実行し、その中でシェル コマンドを使用psして詳細を取得することもできます。

たぶん私は正しくありません。誰でもこれで私を助けることができますか?

0 投票する
2 に答える
318 参照

unix - 仮想アドレス

同じプログラムの 2 つのインスタンスを開始するとします。両方のプログラムのテキスト領域の仮想アドレスは同じですか?

0 投票する
5 に答える
24525 参照

linux-kernel - Linux カーネルの任意のアドレスから構造体ページを取得する方法

struct page *リストを取得して記述子テーブルを作成し、デバイスとメモリを共有する既存のコードがあります。そのコードの上位層は現在、ユーザー空間と一緒に、vmallocまたはユーザー空間から割り当てられたバッファーを期待しvmalloc_to_pageており、対応するstruct page *.

上位層は、 を介して取得したメモリだけでなく、あらゆる種類のメモリに対処する必要がありますvmalloc。これは、 で取得されたバッファkmalloc、カーネル スレッドのスタック内のポインタ、または私が認識していないその他のケースである可能性があります。私が持っている唯一の保証は、この上位層の呼び出し元が、問題のメモリ バッファがその時点でカーネル空間にマップされていることを確認する必要があることです (つまり、この時点buffer[i]ですべてにアクセスすることが有効です)。任意のポインタに対応するを取得するにはどうすればよいですか?0<=i<sizestruct page*

疑似コードに入れると、次のようになります。

upper_layerそして、有効なバッファに対処するために変更する必要があります(変更せずにlower_layer)。

私はvirt_to_pageLinux デバイス ドライバーが「論理アドレス、vmallocまたはハイ メモリからのメモリではなく」で動作することを示していることを発見しました。さらに、is_vmalloc_addrアドレスが から来ているかどうかvmallocvirt_addr_validテストし、アドレスが有効な仮想アドレスであるかどうかをテストします ( の飼料virt_to_page; これにはkmalloc(GFP_KERNEL)と カーネル スタックが含まれます)。他のケースについてはどうですか: グローバル バッファ、ハイ メモリ (今のところ無視できますが、いつか来るでしょう)、おそらく私が気付いていない他の種類ですか? したがって、質問を次のように再定式化できます。

  1. カーネル内のすべての種類のメモリ ゾーンとは?
  2. どうすればそれらを区別できますか?
  3. それぞれのページ マッピング情報を取得するにはどうすればよいですか?

問題がある場合、コードは ARM (MMU を使用) で実行されており、カーネルのバージョンは少なくとも 2.6.26 です。

0 投票する
3 に答える
715 参照

c# - C#でRAMがオーバーするとどうなりますか?

私はコンピューターの専門家ではないので、この質問をもう少し具体的に説明してみましょう。

私はいくつかの科学計算を行っていますが、その計算では結果を保存するために大量のメモリが必要になることがあります。数日前、出力ファイルに 4 GB のハード ディスクが必要でしたが、この量の RAM がありました。そう:

  • 実行中のプログラムがコンピューターで使用可能なメモリよりも多くのメモリを割り当てた場合、CLR (またはそれは別のものですか?) はメモリをどのように処理しますか? HDにスワップが作成されますか?(それが私のプログラムを遅くする可能性があることは知っていますが、私はメモリの問題にのみ関心があります)
  • Linux で MONO を使用するか、Windows で VS を使用するかなど、OS に依存しますか?

前もって感謝します!

0 投票する
2 に答える
2148 参照

eclipse - Eclipse INI 構成の問題

非常に大きなプロジェクトに取り組んでおり、仮想メモリを増やしても、プロジェクトを更新すると Eclipse がクラッシュします。エラーはJava ヒープ スペース エラーです。

これが現在のセットアップです。

これ以上増やすとEclipseが起動しなくなります。

0 投票する
1 に答える
2314 参照

linux-kernel - 32ビットおよび64ビットカーネルのzone_NORMALおよびZONE_HIGHMEM

チューニングとパフォーマンスの目的で、Linuxのメモリ管理をもう少し明確にしようとしています。

IBMのWebサイトにあるこの非常に興味深いレッドブック「Linuxパフォーマンスとチューニングのガイドライン」を読んだことで、私は完全には理解していないことに気づきました。

IA-32などの32ビットアーキテクチャでは、Linuxカーネルは最初のギガバイトの物理メモリ(予約範囲を考慮すると896 MB)のみを直接アドレス指定できます。いわゆるメモリより上のメモリはZONE_NORMAL、下位1GBにマップする必要があります。このマッピングはアプリケーションに対して完全に透過的ですが、メモリページを割り当てるとZONE_HIGHMEMパフォーマンスがわずかに低下します。

  1. 896 MBを超えるメモリを下位1GBにマッピングする必要があるのはなぜですか?
  2. にメモリページを割り当てることでパフォーマンスに影響があるのはなぜZONE_HIGHMEMですか?
  3. その時は何にZONE_HIGHMEM使われますか?
  4. 最大4GB()を認識できるカーネルがCONFIG_HIGHMEM=y最初のギガバイトを使用できるのはなぜですか?

前もって感謝します