gpt4 book ai didi

winapi - malloc 和 HeapAlloc 之间是否有根本区别(除了可移植性)?

转载 作者:行者123 更新时间:2023-12-03 17:19:57 24 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





malloc() vs. HeapAlloc()

(8 个回答)


8 个月前关闭。




我有一些代码,出于各种原因,我试图从 C 运行时移植到使用 Windows 堆 API 的运行时。我遇到了一个问题:如果我重定向 malloc/calloc/realloc/free调用 HeapAlloc/HeapReAlloc/HeapFree (使用 GetProcessHeap 作为句柄),内存似乎分配正确(没有返回错误指针,也没有抛出异常),但是我正在移植的库由于某种原因说“无法分配内存”。

我已经尝试过使用 Microsoft CRT(使用底层的堆 API)和另一家公司的运行时库(使用底层的全局内存 API);这两者的 malloc 与库配合良好,但由于某种原因,直接使用堆 API 不起作用。

我已经检查过分配不是太大(> = 0x7FFF8 字节),但它们不是。

我能想到的唯一问题是内存对齐;是这样吗?或者除此之外,堆 API 和 CRT 内存 API 之间是否存在我不知道的根本区别?

如果是,那是什么?如果不是,那么为什么静态 Microsoft CRT(包含在 Visual Studio 中)在 malloc 中采取一些额外的步骤/calloc调用前 HeapAlloc ?我怀疑有区别,但我想不出它可能是什么。

谢谢!

最佳答案

当我发现困难的时候......

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

关于winapi - malloc 和 HeapAlloc 之间是否有根本区别(除了可移植性)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4588660/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com