IAtlMemMgr クラス
このクラスは、メモリ マネージャーへのインターフェイスを表します。
__interface __declspec( uuid( "654F7EF5-CFDF-4df9-A450-6C6A13C622C0" )) IAtlMemMgr
メンバー
メソッド
メモリ ブロックを割り当てるためにこのメソッドを呼び出します。 |
|
メモリ ブロックを解放するには、このメソッドを呼び出します。 |
|
割り当てられたメモリ ブロックのサイズを取得するときにこのメソッドを呼び出します。 |
|
メモリ ブロックを再割り当てするには、このメソッドを呼び出します。 |
解説
このインターフェイスは CComHeap、CCRTHeap、CLocalHeap、CGlobalHeap、または CWin32Heapによって実装されます。
[!メモ]
ローカルおよびグローバル ヒープ関数は、他のメモリ管理関数より低速であり、できるだけ多くの機能はありません。したがって、新しいアプリケーションでは heap functionsを使用する必要があります。これらのクラスは CWin32Heap で使用できます。
使用例
// Demonstrate IAtlMemMgr using the five possible
// memory function implementation classes.
HRESULT MemoryManagerDemonstration(IAtlMemMgr& MemoryManager) throw()
{
// The IAtlMemMgr interface guarantees not to throw exceptions
// so we can make the same guarantee for this function
// without adding exception handling code.
// A variable which will point to some allocated memory.
void* pMemory = NULL;
const size_t BytesInChunk = 1024;
// Allocate a chunk of memory
pMemory = MemoryManager.Allocate(BytesInChunk);
// Confirm the validity of the allocated memory
if (pMemory == NULL)
return E_OUTOFMEMORY;
// Confirm the size of the allocated memory
ATLASSERT(MemoryManager.GetSize(pMemory) == BytesInChunk);
// Increase the size of the allocated memory
pMemory = MemoryManager.Reallocate(pMemory, BytesInChunk * 2);
// Confirm the validity of the allocated memory
if (pMemory == NULL)
return E_OUTOFMEMORY;
// Confirm the size of the reallocated memory
ATLASSERT(MemoryManager.GetSize(pMemory) == BytesInChunk * 2);
// Free the allocated memory
MemoryManager.Free(pMemory);
return S_OK;
}
int DoMemoryManagerDemonstration()
{
CComHeap heapCom;
CCRTHeap heapCrt;
CLocalHeap heapLocal;
CGlobalHeap heapGlobal;
// It is necessary to provide extra information
// to the constructor when using CWin32Heap
CWin32Heap heapWin32(NULL, 4096);
ATLASSERT(S_OK==MemoryManagerDemonstration(heapCom));
ATLASSERT(S_OK==MemoryManagerDemonstration(heapCrt));
ATLASSERT(S_OK==MemoryManagerDemonstration(heapLocal));
ATLASSERT(S_OK==MemoryManagerDemonstration(heapGlobal));
ATLASSERT(S_OK==MemoryManagerDemonstration(heapWin32));
return 0;
}
必要条件
Header: atlmem.h