我使用从我的 C# 代码中的 C++ 代码(LPSolve,参见 http://lpsolve.sourceforge.net/5.5/)编译的 dll。我使用 API 构建线性规划模型,然后对其进行求解。我调用如下函数:
[DllImport("lpsolve55.dll", SetLastError = true)]
public static extern bool add_columnex
(int lp, int count, double[] column, int[] rowno);
我想知道当我调用这样一个函数并且我在托管代码中创建的整数和数组离开作用域(在 c# 代码中)时,内存方面会发生什么。他们有资格进行垃圾收集吗?这对 C++ 代码意味着什么?或者是不合格的,在那种情况下:为什么?
最佳答案
因为函数原型(prototype)使用的是普通的旧数据类型和数组,所以这些值的内存被固定在适当的位置,然后 native 代码直接作用于数据。然后当函数返回时,内存被取消固定并且可以被垃圾收集。
换句话说,他们永远不会离开范围。
就 C++ 代码而言,如果它需要存储任何数据,那么它需要获取传递给它的数据的拷贝,然后自行管理该内存。
关于c# - 当我调用 DLL 中的函数时会发生什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4861704/