我有代码,由于各种原因,我正在尝试从C运行时移植到使用
Windows Heap API的代码.我遇到了一个问题:如果我将malloc / calloc / realloc / free调用重定向到HeapAlloc / HeapReAlloc / HeapFree(使用GetProcessHeap作为句柄),则内存似乎被正确分配(没有返回错误的指针,也没有抛出异常) ),但我移植的库说“由于某种原因未能分配内存”.
我已经尝试过使用Microsoft CRT(它使用下面的Heap API)和另一个公司的运行时库(它使用下面的Global Memory API);两者的malloc适用于库,但由于某些原因,直接使用Heap API不起作用.
我已经检查过分配不是太大(> = 0x7FFF8字节),而它们不是.
我能想到的唯一问题是内存对齐;是这样吗?或者除此之外,Heap API和我不知道的CRT内存API之间是否存在根本区别?
如果是这样,它是什么?如果没有,那么为什么静态Microsoft CRT(包含在Visual Studio中)在调用HeapAlloc之前需要在malloc / calloc中执行一些额外的步骤?我怀疑存在差异,但我想不出它可能是什么.
谢谢!