当我使用IntPtr保留内存并将动态数组传递给本机代码时,在C#/托管端初始化此内存并将其传递给我的本机DLL之后,这块内存是固定还是复制的?即如果我在我的本机代码中修改数组,我会在托管代码中看到修改吗?
我知道没有必要使用IntPtr,但由于数组嵌入到复杂的结构中,所以看起来更方便。
答案 0 :(得分:2)
在.NET程序中获取内存分配的IntPtr的唯一有效方法是:
对后两个项目符号非常小心,特别是 fixed 关键字需要不安全,因为它很危险。一旦代码执行离开固定语句的范围,停止使用IntPtr非常重要。当运行时没有强制执行时,当GC发现堆已损坏时,失败模式是完全不可识别的ExecutionEngineException。由于代码在移动后通过IntPtr写入内存块,从而覆盖了其他内容。