C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了winapi – malloc和HeapAlloc之间是否存在根本区别(除了便携性)?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有代码,由于各种原因,我正在尝试从C运行时移植到使用 @L_502_0@ 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的提示;它失败了.

大佬总结

以上是大佬教程为你收集整理的winapi – malloc和HeapAlloc之间是否存在根本区别(除了便携性)?全部内容,希望文章能够帮你解决winapi – malloc和HeapAlloc之间是否存在根本区别(除了便携性)?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。