winapi – malloc和HeapAlloc之间是否存在根本区别(除了便携性)?

前端之家收集整理的这篇文章主要介绍了winapi – malloc和HeapAlloc之间是否存在根本区别(除了便携性)?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有代码,由于各种原因,我正在尝试从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中执行一些额外的步骤?我怀疑存在差异,但我想不出它可能是什么.

谢谢!

解决方法

正如我发现的那样艰难…

差异不是基本的,但HeapReAlloc(使用RtlReAllocateHeap)不会自动将空指针视为调用HeapAlloc的提示;它失败了.

猜你在找的C&C++相关文章