我正在编写一些需要从 C# 调用的 native C++ 代码(我无法用 C# 代码替换 C++ native 代码)。
我在使用 malloc/free 在 native C++ 代码中分配/取消分配一些内存时发现内存损坏。然后我用了 LocalAlloc/LocalFree 和 HeapAlloc/HeapFree 也遇到了同样的问题。
分配/解除分配似乎是正确的,它们发生在由 native 代码创建的单独线程中。
我想知道在 C# 调用的 native C++ 库中使用哪种分配策略最好
编辑: 发现了问题:问题不在分配/解除分配代码中,而是在解除分配后写入的某些内存中。
最佳答案
只要代码的 C# 端使用编译器的 /unsafe
开关和用于保存数据缓冲区的 fixed
关键字,我想你应该没问题.
至于你的内存分配问题,它可能不是导致问题的 C++ 内存分配代码,它可能是 C++ 代码与驱动程序交互的方式......可能使用 VirtualAlloc
/VirtualFree
对根据 MSDN文档...
编辑:当您在与驱动程序交互后尝试分配缓冲区以保存来自 C++ 端的数据时...可能是竞争条件或中断延迟导致内存损坏。 .只是一个想法...
希望对您有所帮助, 此致, 汤姆。
关于c# - C# 使用的 native C++ 库的内存分配器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2171996/