gpt4 book ai didi

c# - 如何固定 'unmanaged' 指针?

转载 作者:太空狗 更新时间:2023-10-29 21:09:36 28 4
gpt4 key购买 nike

我有一个接收一些参数、分配内存并返回指针的外部方法。

[DllImport("some.dll", CallingConvention = CvInvoke.CvCallingConvention)]
public static extern IntPtr cvCreateHeader(
Size size,
int a,
int b);

我很清楚在托管应用程序中分配非托管内存是不好的做法,但在这种情况下我别无选择,因为 dll 是第 3 方。

有一个释放内存的等效函数,我知道分配的数组的大小是多少。

  1. 如何固定返回的指针以便 GC 不移动它(不会不安全)? 'fixed' 不会这样做,因为这个指针在整个类(class)中被广泛使用?
  2. 这个 p/Invoke 有更好的方法吗?

最佳答案

不,您得到的是指向内存的指针,该内存永远 不会移动。从 native 堆分配的内存保持不变,与垃圾收集器使用的压缩策略没有任何相似之处。这只有在内存管理系统可以找到所有指向已分配内存块的指针时才有效。这样它就可以在 block 移动时更新这些指针。 native 代码不存在类似的东西,没有可靠的方法可以找到这些指针。

不要费心寻找固定指针的方法。没有,因为不需要。

关于c# - 如何固定 'unmanaged' 指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14458237/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com