HeapAllocとVirtualAllocの使いどころ

最適化の為にはメモリの確保方法は工夫しなければならないと以前の記事にしましたが、Windowsプログラミングにおける工夫の1つをご紹介します。

Windowsにはメモリ確保の関数が多いですが、最低限以下の4つは特性を理解して使うべきです。

  • HeapAlloc
  • VituralAlloc
  • LocalAlloc/GlobalAlloc
  • new (malloc)


・ HeapAlloc

異なるメモリブロックを多数作成するときに利用します。パフォーマンスを最大にしたい場合、同じブロック長のみで構成したヒープハンドルを複数作成する必要があります。

・ VirtualAlloc

また、多量のデータを格納する空間を用意する必要があるが、一部は利用しないかもしれない場合に重宝します(ハッシュテーブル等)。部分的に領域の確保を遅らせることが出来ます。多量のメモリを確保する場合は基本的にこの関数に頼るべきです。

・ LocalAlloc/GlobalAlloc

どちらもWin16時代の名残です。Win32APIが要求しない限り、新規にこれを採用する理由はありません。

・ malloc (new)

データ長にあわせて、プロセスに既にあるヒープを使ったり、新たにヒープを作成したりします。またマルチスレッドに対する耐性があるバージョンも存在し、賢いですが、その分最も遅いです。一般的には最後にHeapAllocを呼び出す結果になります。

私がC++をメインで使っているので、カバーする範囲が足りないかもしれません。こんなのも書いて欲しいというリクエストがあったら追記&必要に応じて調査します。

Leave a Reply

最初のコメントを頂けますか?

更新通知を受け取る »
avatar
wpDiscuz