私は動的メモリ管理に関するプロジェクトを行っています。HeapCreate 関数と HeapAlloc 関数について混乱しています。
HeapCreate() 関数の場合、ヒープを作成でき、関数は HANDLE を返します。ヒープのサイズを初期化できます。
winHandle = HeapCreate( 0, 2 * 1024, 0); としましょう。
次に、HeapAlloc 関数を使用して、このヒープに割り当てることができます。しかし、ヒープのサイズについて混乱しています。例を試してみます。このヒープで HeapAlloc( winHandle, 0, 1024) を 2 回呼び出すので、合計は 2 * 1024 になります。ただし、HeapAlloc を何度も呼び出してもエラーは発生しません。
HeapAlloc( winHandle, 0, 1024) を 3 回呼び出すとします。割り当ての合計サイズは 3 * 1024 になります。これはヒープ サイズ 2 * 1024 よりも大きくなります。ただし、エラーは発生しません。
この質問に答えるのを手伝ってくれる人はいますか?
ありがとう、
ここにテストコードがあります。
// create heap, and return a headle(id) for that heap
HANDLE winHandle = HeapCreate( 0, sizeof(Dog), sizeof(Dog) );
// allocate the heap header to that handle
void* s = HeapAlloc( winHandle, 0, sizeof(Dog) );
// check if the alloc is success or not
assert( 0 != s );
printf("%p \n", s);
// load the heap header data
Dog* heapHeader = new(s) Dog( 1, 2, 4);
// allocate the heap header to that handle
void* ss = HeapAlloc( winHandle, 0, sizeof(Dog) );
// check if the alloc is success or not
assert( 0 != ss );
printf("%p \n", ss);
// load the heap header data
Dog* heapHeadder = new(ss) Dog( 1, 2, 4);