我正在做一个关于动态内存管理的项目。我对 HeapCreate 和 HeapAlloc 函数感到困惑。
对于 HeapCreate() 函数,我们可以创建一个堆,该函数将返回一个 HANDLE。我们可以初始化堆的大小。
假设 winHandle = HeapCreate(0, 2 * 1024, 0);
然后,我可以通过 HeapAlloc 函数在这个堆上进行分配。但我对堆的大小感到困惑。我试了一个例子,我在这个堆上调用了 HeapAlloc(winHandle, 0, 1024) 两次,所以总数是 2 * 1024。但是我仍然可以多次调用 HeapAlloc 而不会出错。
假设我调用 HeapAlloc(winHandle, 0, 1024) 三次。分配的总大小将是 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);