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