c# - 当我调用 DLL 中的函数时会发生什么

标签 c# c++ memory

我使用从我的 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/

相关文章:

c# - 多行自动调整大小的可滚动 FlowLayoutPanel

c# - 在 MVC 应用程序中缓存图像的正确方法

c++ - 立即作为参数传递的对象的生命周期是多少?

c++ - 将 const char* 转换为 const wchar_t*

c++ - 在 Windows Server 2008R2 上启动调试构建时出现问题

c - 即使在关闭文件并释放指针后,C 程序仍未释放内存的原因可能是什么?

c - xmlCopyNode (libxml2) 内存泄漏?

c# - C#获取目录下文件名的方法

c# - 如何制作折线图从0 X轴开始

c++ - C++ Linux 中损坏的双链表