c# - C# 使用的 native C++ 库的内存分配器

标签 c# c++ unmanaged

我正在编写一些需要从 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/

相关文章:

c++ - SPOJ SUMFOUR.....TLE 在测试用例 9 上

c++ - 是否保证成员函数在创建任何对象之前准备就绪?

c++ - 如何在非托管 C++ 中使用 Enum::GetName

c# - 无法更新 TinyMCE 中的文本框

c# - Linq to SQL DataContext 生命周期管理问题

python - 使用某些 OpenCV 函数时出现段错误

c# - unmanaged.dll.manifest 文件有什么用途?

c++-cli - 坚持从非托管 C++ 调用约定调用托管 CLI 方法

c# - 正则表达式仅允许字符第一次出现

c# - 错误 CS7036 没有给定的参数对应于 'driver' 的所需形式参数 'SpecflowBaseTest.SpecflowBaseTest(IWebDriver)'