gpt4 book ai didi

c# - 托管代码加载时是否需要释放非托管代码中的内存

转载 作者:太空狗 更新时间:2023-10-29 21:07:46 25 4
gpt4 key购买 nike

有 2 个二进制文件。一种是 native /非托管 C++ dll,另一种是托管 C# exe。现在我正在做的是在 c++ dll 中编写一个函数,并使用 malloc 在其中分配内存。我导出了这个函数以供我的 C# 模块使用。

在 C++ 中我做了:

char* FunctionHavingAllocatedMemory(int i){

char* p = (char*)malloc(100);

.....

//use p and do not free it.

return p;

}

在 C# 中我做了:

[DllImport("C++.dll")]

private static extern string FunctionHavingAllocatedMemory(int i);

现在,我的问题是:是否需要释放 c++ 模块中的内存,或者 c# 模块会在函数返回时自动释放它。为什么我在想,因为 c# 是托管模块,它会自动清理内存。

(虽然在 C++ 中释放内存很好,但我有一定的限制,我不能在 C++ 中释放内存。只是想了解更多关于托管应用程序及其处理内存管理的方式)。

最佳答案

垃圾收集器仅在托管堆 上工作:在FunctionHavingAllocatedMemory 中分配的内存由您负责释放。

关于c# - 托管代码加载时是否需要释放非托管代码中的内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4407241/

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