CWin32Heap クラス
このクラスは、Win32 ヒープ割り当て関数を使用して IAtlMemMgr を実装します。
重要
このクラスとそのメンバーは、Windows ランタイムで実行するアプリケーションで使用することはできません。
構文
class CWin32Heap : public IAtlMemMgr
メンバー
パブリック コンストラクター
名前 | 説明 |
---|---|
CWin32Heap::CWin32Heap | コンストラクター。 |
CWin32Heap::~CWin32Heap | デストラクター。 |
パブリック メソッド
名前 | 説明 |
---|---|
CWin32Heap::Allocate | ヒープ オブジェクトからメモリ ブロックを割り当てます。 |
CWin32Heap::Attach | ヒープ オブジェクトを既存のヒープにアタッチします。 |
CWin32Heap::Detach | ヒープ オブジェクトを既存のヒープからデタッチします。 |
CWin32Heap::Free | 以前にヒープから割り当てられたメモリを解放します。 |
CWin32Heap::GetSize | ヒープ オブジェクトから割り当てられたメモリ ブロックのサイズを返します。 |
CWin32Heap::Reallocate | ヒープ オブジェクトからメモリ ブロックを再割り当てします。 |
パブリック データ メンバー
名前 | 説明 |
---|---|
CWin32Heap::m_bOwnHeap | ヒープ ハンドルの現在の所有権を確認するために使用されるフラグ。 |
CWin32Heap::m_hHeap | ヒープ オブジェクトへのハンドル。 |
解説
CWin32Heap
は、HeapAlloc と HeapFree を含む Win32 ヒープ割り当て関数を使用して、メモリ割り当てメソッドを実装します。 他のヒープ クラスとは異なり、CWin32Heap
では、メモリが割り当てられる前に有効なヒープハンドルを提供する必要があります。他のクラスは、既定でプロセス ヒープを使用します。 ハンドルは、コンストラクターまたは CWin32Heap::Attach メソッドに渡すことができます。 詳細については、「CWin32Heap::CWin32Heap」メソッドを参照してください。
例
IAtlMemMgr の例を参照してください。
継承階層
IAtlMemMgr
CWin32Heap
要件
ヘッダー: atlmem.h
CWin32Heap::Allocate
ヒープ オブジェクトからメモリ ブロックを割り当てます。
virtual __declspec(allocator) void* Allocate(size_t nBytes) throw();
パラメーター
nBytes
新しいメモリ ブロック内の要求されたバイト数。
戻り値
新しく割り当てられたメモリ ブロックへのポインターを返します。
解説
このメソッドによって割り当てられたメモリを解放するには、CWin32Heap::Free または CWin32Heap::Reallocate を呼び出します。
HeapAlloc を使用して実装されます。
CWin32Heap::Attach
ヒープ オブジェクトを既存のヒープにアタッチします。
void Attach(HANDLE hHeap, bool bTakeOwnership) throw();
パラメーター
hHeap
既存のヒープ ハンドルです。
bTakeOwnership
CWin32Heap
オブジェクトがヒープのリソースに対して所有権を取得するかどうかを示すフラグ。
解説
bTakeOwnership が TRUE の場合、CWin32Heap
オブジェクトによりヒープ ハンドルが削除されます。
CWin32Heap::CWin32Heap
コンストラクター。
CWin32Heap() throw();
CWin32Heap( HANDLE hHeap) throw();
CWin32Heap(
DWORD dwFlags,
size_t nInitialSize,
size_t nMaxSize = 0);
パラメーター
hHeap
既存のヒープ オブジェクト。
dwFlags
ヒープの作成に使用されるフラグ。
nInitialSize
ヒープの初期サイズ。
nMaxSize
ヒープの最大サイズ。
解説
メモリを割り当てる前に、CWin32Heap
オブジェクトに有効なヒープ ハンドルを提供する必要があります。 これを実現する最も簡単な方法は、プロセス ヒープを使用することです。
CWin32Heap MyHeap(GetProcessHeap());
また、コンストラクターに既存のヒープ ハンドルを提供できますが、その場合には新しいオブジェクトはヒープの所有権を引き継ぎません。 CWin32Heap
オブジェクトが削除されても、元のヒープ ハンドルは依然として有効です。
既存のヒープも、CWin32Heap::Attach を使用して新しいオブジェクトにアタッチできます。
すべての処理がシングル スレッドから行われるときに、ヒープが必要な場合、最適な方法は次のようにオブジェクトを作成することです。
CWin32Heap MyHeap(HEAP_NO_SERIALIZE, SomeInitialSize);
パラメーター HEAP_NO_SERIALIZEは、ヒープ関数がメモリを割り当てて解放するときに、パフォーマンスの向上に応じて相互除外を使用しないことを指定します。
第 3 のパラメーターの既定値は 0 であり、この場合には必要に応じてヒープを拡大できます。 メモリ サイズおよびフラグについては HeapCreate に関するページを参照してください。
CWin32Heap::~CWin32Heap
デストラクター。
~CWin32Heap() throw();
解説
CWin32Heap
オブジェクトにヒープの所有権がある場合は、ヒープ ハンドルを破棄します。
CWin32Heap::Detach
ヒープ オブジェクトを既存のヒープからデタッチします。
HANDLE Detach() throw();
戻り値
オブジェクトが以前アタッチされていたヒープにハンドルを返します。
CWin32Heap::Free
CWin32Heap::Allocate または CWin32Heap::Reallocate によって以前にヒープから割り当てられたメモリを解放します。
virtual void Free(void* p) throw();
パラメーター
P
解放するメモリのブロックへのポインター。 NULL は有効な値であり、何も行いません。
CWin32Heap::GetSize
ヒープ オブジェクトから割り当てられたメモリ ブロックのサイズを返します。
virtual size_t GetSize(void* p) throw();
パラメーター
P
メソッドに取得されるサイズを持つメモリ ブロックへのポインター。 これは、CWin32Heap::Allocate または CWin32Heap::Reallocate によって返されるポインターです。
戻り値
割り当てられたメモリのサイズ (バイト単位) が返されます。
CWin32Heap::m_bOwnHeap
m_hHeap に格納されているヒープ ハンドルの現在の所有権を確認するために使用されるフラグ。
bool m_bOwnHeap;
CWin32Heap::m_hHeap
ヒープ オブジェクトへのハンドル。
HANDLE m_hHeap;
解説
ヒープ オブジェクトへのハンドルを格納するために使用する変数。
CWin32Heap::Reallocate
ヒープ オブジェクトからメモリ ブロックを再割り当てします。
virtual __declspec(allocator) void* Reallocate(void* p, size_t nBytes) throw();
パラメーター
P
再割り当てするメモリ ブロックへのポインター。
nBytes
割り当てられるブロックの新しいサイズ (バイト単位)。 ブロックは大きくすることも小さくすることもできます。
戻り値
新しく割り当てられたメモリ ブロックへのポインターを返します。
解説
p が NULL の場合は、まだメモリ ブロックが割り当てられていないと見なされ、引数が nBytes である CWin32Heap::Allocate が呼び出されます。
関連項目
クラスの概要
IAtlMemMgr クラス
CLocalHeap クラス
CGlobalHeap クラス
CCRTHeap クラス
CComHeap クラス