第 号
|
Last Updated 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() を呼び出す必要があります.
2005/05/25
参照
メモリ管理
GlobalLockとGlobalFree