[解決済み] VirtualAllocとHeapAllocの違いは何ですか?
質問
Windows環境でメモリを確保する方法は、次のようにたくさんあります。
VirtualAlloc
,
HeapAlloc
,
malloc
,
new
.
このように、両者の違いは何でしょうか?
どのように解決するのですか?
それぞれのAPIは異なる用途のものです。また、それぞれ、メモリを使い終わったら、正しい deallocation/freeing 関数を使用する必要があります。
VirtualAlloc
低レベルの Windows API で、多くのオプションを提供しますが、主にかなり特殊な状況の人々にとって有用です。より大きなチャンクで (編集: 4KB ではなく) のみメモリを割り当てることができます。これが必要な状況もありますが、そのような状況に陥ったときにはわかるでしょう。最も一般的なのは、他のプロセスと直接メモリを共有しなければならない場合です。汎用的なメモリ割り当てには使わないでください。使用方法
VirtualFree
を使って割り当てを解除してください。
ヒープアロック
大きなチャンクではなく、要求された任意のサイズのメモリを割り当てます。
VirtualAlloc
.
HeapAlloc
を呼び出す必要があることを知っています。
VirtualAlloc
を呼び出す必要があり、自動的にそうしてくれる。例えば
malloc
と似ていますが、Windows専用で、さらにいくつかのオプションがあります。一般的なメモリのチャンクを割り当てるのに適しています。WindowsのAPIによっては、渡すメモリの確保にこれを使うことを要求されるかもしれませんし、その仲間である
HeapFree
を使ってメモリを解放する必要があるかもしれません。
マロク
C言語でメモリを割り当てる方法です。C++ではなくCで書いていて、あなたのコードを例えばUnixコンピュータでも動作させたい場合、あるいは誰かが特にこれを使うように言っている場合は、これを使うことをお勧めします。メモリを初期化しない。 一般的なメモリの塊を割り当てるのに適しています。
HeapAlloc
. シンプルなAPI。使用する
free
を使用して,割り当てを解除します。Visual C++の
malloc
は
HeapAlloc
.
新しい
C++のメモリ割り当て方法です。C++で書いている場合は、これを使うことをお勧めします。また、割り当てられたメモリにオブジェクトを配置します。使用方法
delete
を使って、割り当てを解除します(あるいは
delete[]
配列の場合)。Visual Studio の
new
を呼び出す
HeapAlloc
を呼び出し、呼び出し方によっては、オブジェクトを初期化します。
最近の C++ 標準 (C++11 以上) では、手動で
delete
を使用しなければならない場合、そのやり方は間違っているので
スマートポインタ
のように
unique_ptr
のようなスマートポインタを使用します。C++14 以降では、同じことが
new
(などの関数に置き換わる)。
make_unique()
).
他にも似たような関数がいくつかあり
SysAllocString
のような、特定の状況で使用しなければならないと言われる可能性のある、他の類似の関数もあります。
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン