【发布时间】:2011-06-03 02:02:54
【问题描述】:
由于各种原因,我正在尝试将代码从 C 运行时移植到使用 Windows 堆 API 的代码。我遇到了一个问题:如果我将malloc/calloc/realloc/free 调用重定向到HeapAlloc/HeapReAlloc/HeapFree(以GetProcessHeap 为句柄),则内存似乎分配正确(没有返回错误指针,也没有抛出异常),但我移植的库由于某种原因说“分配内存失败”。
我已经在 Microsoft CRT(它使用下面的 Heap API)和另一家公司的运行时库(它使用下面的 Global Memory API)上进行了尝试;两者的 malloc 都可以很好地与库配合使用,但由于某种原因,直接使用 Heap API 不起作用。
我检查了分配不是太大(>= 0x7FFF8 字节),但它们不是。
我能想到的唯一问题是内存对齐;是这样吗?或者除此之外,Heap API 和 CRT 内存 API 之间是否存在我不知道的根本区别?
如果是这样,那是什么?如果不是,那么为什么 static Microsoft CRT(包含在 Visual Studio 中)在调用 HeapAlloc 之前在 malloc/calloc 中采取一些额外的步骤?我怀疑有区别,但我想不出它可能是什么。
谢谢!
【问题讨论】:
标签: winapi malloc heap-memory msvcrt heapalloc