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 |
|