Last Updated 2005/05/25
Programming Tips Visual C++ API  索 引 
メモリ確保
2005/05/25

Win16 の時には GlobalAlloc() や LocalAlloc() が用意されていたが,Win32 になってその区別はなくなった.
(互換性の為に2つの名前は用意してある)

小さなメモリをたくさん使うのであれば GlobalAlloc() を使用するよりも new などを使用した方が効率がよい.
大きなメモリであれば GlobalAlloc() を直接使用しても問題はないはずである.

メモリ管理の GlobalAlloc() や new,malloc() はどれも最終的には HeapAlloc() を呼び出している.

Windows で使用するヒープには Windows Heap と CRT(C Run Time) Heap の2種類が存在する.
GlobalAlloc() では Windows Heap に,new では CRT Heap にメモリが確保される.

GlobalFree() では領域がちゃんと解放されるが,delete では領域は解放されずにフリーメモリリストに登録される.
次にメモリが必要になった時に,GlobalAlloc() はまた Heap から取得するが,new はフリーメモリリストから取得する.そして適当なサイズがなければヒープから取得するので,new の方がスピードが速い.

しかし,頻繁にサイズの違うメモリ領域を確保しようとするとフリーメモリリスト内に未使用の空き領域がたくさん登録されてしまい,メモリ不足になる恐れがある.
これを避けるには定期的に _heapmin() を呼び出す必要があります.


参照
メモリ管理
GlobalLockとGlobalFree
前後のTips
メモリ確保

DSS ProgrammingTipsCGI Ver2.02