問題タブ [virtualalloc]
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.
c++ - Windows C コードでのメモリ割り当て
Windows C プログラミングでどの方法が推奨されているか知りたいです: malloc または Win32 HeapAlloc (おそらく VirtualAlloc?) 関数を使用します。
MSDN のメモリ管理関数の記事と、malloc と HeapAlloc に関する MSDN の記事を読みましたが、どちらをどのような状況で使用すべきかについては言及されていません。
c++ - Win32 WriteProcessMemory() 魔法のオフセット値
別のプロセスが所有する Win32 ListView のデータを読み込もうとしています。残念ながら、私の WriteProcessMemory() 呼び出しは、「この関数はこのシステムではサポートされていません」というエラーで失敗します。VirtualAlloc() 呼び出しでベース アドレスに「NULL」を指定した場合。ただし、その VirtualAlloc() アドレスを、幸運にもフラストレーションの瞬間にランダムに選択した「魔法の」値でオフセットすると、呼び出しはシステムで機能しますが、他のシステムでは失敗します。(以下のコードを参照)
この魔法のオフセットが私のために何をしているのか、誰か提案できますか? 試行錯誤により、特定のシステムで機能する値を見つけることができますが、この問題の一般的な解決策は見つかりません。
ありがとう、ポールH
明確化 (Cd-MaN によって追加): これは Windows Mobile プラットフォーム上にあり、おそらく非 x86 アーキテクチャです。したがって、状況は異なる可能性があります (ARM プロセッサには個別のアドレス空間がありますか?)。
c++ - WindowsMobileでの連続したVirtualAllocの動作
Windows Mobileアプリケーションのメモリパフォーマンスを最適化しており、Win32上のVirtualAlloc とWindowsCEの動作にいくつかの違いがあります。
次のテストを検討してください。
コードは、「c」で始まる4096のデータを「割り当て」ます。Win32では、これは機能します。VirtualAllocのドキュメントには、それが合法であるか偶然であるかについての言及はありませんが、この動作を期待するGoogleで見つけたコードの例はたくさんあります。
Windows CE 5.0 / 5.2では、「c」でメモリブロックを使用すると、99%の場合問題はありませんが、一部の(すべてではない)Windows Mobile 6デバイスでは、ReadFileとWriteFileがエラー87(パラメータ間違っている。)。ReadFileがIsBadWritePtrまたは同様のものを呼び出していると想定し、これが原因でfalseを返します。2つのReadFile呼び出しを実行すると、すべてが正常に機能します。(もちろん、他のAPI呼び出しも失敗する可能性があります。)
上記を機能させるために、 VirtualAllocによって返されるメモリを拡張する方法を探しています。Windows CEで大量のメモリを予約することは、各プロセスが32MBしか取得できず、他のアイテムがロードされているため、他の問題を引き起こさずに大量のメモリを予約することはできないため、問題があります。(共有領域に大量のメモリを予約することは可能ですが、これには他の問題もあります。)
VirtualAllocに、事前に予約せずにリージョンを拡大または結合させる方法はありますか?
次の例を考えると、問題があるのではないかと思います。
c++ - HDDの特定の構成でVirtualAllocが失敗する
何らかの理由で、ハードディスクの一部の構成(RAID、ランダムパーティション、オペレーティングシステムパーティションではなく、別のIDEコントローラーを介して)で実行している場合、アプリケーションで.のコードがVirtualAlloc
返されます。null
GetLastError
ERROR_INVALID_PARAMETER
渡されるフラグ以外の唯一のパラメーターは(MEM_COMMIT | MEM_TOP_DOWN, PAGE_READWRITE)
、ディスクジオメトリから取得されたセクターサイズの倍数として計算されたサイズです(残念ながら、NDAなどのためにコードを投稿できません)。
誰かがこれの経験を持っているかどうか疑問に思っていますか?または、RAIDの一部であるかパーティション化されているディスクでWindowsがページサイズを異なる方法で処理する理由を誰かが知っている場合は、助けていただければ幸いです。
windows - WinMobile に十分な物理メモリがあるにもかかわらず、VirtualAlloc が失敗する (メモリがない) のはなぜですか?
メモリを予約するための VirtualAlloc 呼び出しが失敗するのを日常的に見ています。割り当てがプロセスごとの仮想メモリにカウントされず、代わりにシステム共有メモリを使用するように、2MB を要求しています。障害が発生すると、システムは物理メモリに 100 MB を超える空き容量があると報告します。
Windows Mobile 6.1 デバイスで実行しています。これまでのところ、これはデバイス固有の問題です。多くの同一のデバイスで動作し、1 つのデバイスで失敗します。このデバイス上の他のプロセスが共有メモリを予約しているかどうかを判断できるようにしたいと考えています。どうすればそれができるかわかりません。
これは私が依存しているドキュメントであり、この問題を説明するものは何もありません: http://msdn.microsoft.com/en-us/library/aa908768.aspx
何か案は?ありがとう。
linux - Linuxでメモリを予約するがコミットしない方法はありますか?
Windows には VirtualAlloc があり、アドレス空間の連続した領域を予約できますが、実際には物理メモリを使用しません。後でそれ (またはその一部) を使用する場合は、再度 VirtualAlloc を呼び出して、以前に予約したページの領域をコミットします。
これは実際には非常に便利ですが、最終的にはアプリケーションを Linux に移植したいので、後で移植できない場合は使用したくありません。Linuxにはこれを行う方法がありますか?
編集 - ユースケース
4 GB などの仮想アドレス空間を割り当てることを考えていますが、一度に 64K しかコミットしません。これにより、アレイを最大 4 GB までゼロコピーする方法が得られます。これは重要です。通常、配列サイズとコピーを 2 倍にすると、非常に大きな配列の許容できないレイテンシがランダムに発生するように見えるからです。
memory-management - Windowsで最小の空き仮想メモリアドレスを取得する
タイトルはほとんどすべてを示しています:ウィンドウの下で最小の空き仮想メモリアドレスを取得する方法はありますか?プログラムの開始時(動的メモリ割り当てが行われる前)に、この情報に関心があることを付け加えておきます。
malloc
なぜそれが必要なのか: Windowsで実装を構築しようとしています。それが不可能な場合はVirtualAlloc()
、最初のパラメーターとしてNULLを指定したときに返されるものをすべて実行する必要があります。利用可能なものの一番下にある割り当てメモリのように、それが賢明なことをすることを期待するでしょうが、保証はありません。
c - VS-2010 の関数ポインタ ( + Virtual Alloc 呼び出し)
実験として、実行時にコードを生成できる次のプログラムを作成しようとしています。つまり、私は次のことを行います:
1.実行したい命令のオペコードでバッファを埋めます。
2.関数ポインタを宣言し、バッファの先頭を指すようにします。
3.上記の func-ptr を使用して関数を呼び出します。
コードは次のとおりです: (以下の AndreyT の指示に従って更新されました。)
このコードは、gcc を使用して Linux マシンで正常にコンパイルされます。
現在、Windows (visual-studio-2010) に移行しています。
私の知る限り、mmap機能は、 WindowsのvirtualAllocとvirtualProtectによって提供されます。
私はネット上の MSDN やその他のドキュメントを調べてきました
が、このプログラムを Windows 上の VS-2010 で実行する方法をまだ見つけられていません。
アップデート:
@AndreyTありがとう。それは今働いているようです。次のエラーが表示されますが:
私は今mmap()
電話を交換する必要があると考えてvirtualAlloc()
います。
どうもありがとうございました。次に、MSDN を掘り下げる必要があるとvirtualAlloc()
思います。
windows - メモリページ保護に関する質問
< Windows via C/C++ 5th Edition > を読んでいるときに出会った別の質問があります。まず、いくつかの引用を見てみましょう。
最後のパラメーター fdwProtect は、領域に割り当てる必要がある保護属性を示します。 領域に関連付けられた保護属性は、領域にマップされたコミット済みストレージには影響しません。
領域を予約するときは、領域にコミットされたストレージで最も頻繁に使用される保護属性を割り当てます。たとえば、PAGE_READWRITE の保護属性で物理ストレージをコミットする場合は、PAGE_READWRITE で領域を予約する必要があります。領域の保護属性がコミットされたストレージの保護属性と一致する場合、システムの内部記録保持はより効率的に動作します。
(ストレージをコミットするとき)...通常は、VirtualAlloc が呼び出されて領域を予約したときに使用されたのと同じページ保護属性を渡しますが、別の保護属性を指定することもできます。
上記の引用は私を完全に困惑させました。
領域に関連付けられた保護属性がコミットされたストレージに影響を与えない場合、なぜそれが必要なのですか?
予約とコミットの両方に同じ保護属性を使用することが推奨されているのに、なぜ Windows は異なる属性を使用するオプションを提供するのでしょうか? それは誤解を招き、パラドックスのようなものではありませんか?
予約済み領域とコミット済みストレージのそれぞれの保護属性は、正確にはどこに保存されていますか?
あなたの洞察に感謝します。
c++ - ファイルの内容を仮想メモリにコピーするにはどうすればよいですか?
私は小さなファイルを持っています。それを調べて、その中のバイト数を数えます:
次に、同じサイズの仮想メモリを割り当てます。
ファイルの内容を nyBuf にコピーしたいと思います。どうすればいいのですか?
ありがとう!