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