2つのバイナリがあります。 1つはネイティブ/アンマネージC++ dllで、もう1つはc#exeで管理されています。今私がやっていることは、C++ dllに関数を書いてmallocを使ってその中にメモリを割り当てたことです。この関数をC#モジュールで使用するためにエクスポートしました。 Cではマネージコードによってロードされたアンマネージコードでメモリを解放する必要がありますか
++私がやった:私はC#で
char* FunctionHavingAllocatedMemory(int i){
char* p = (char*)malloc(100);
.....
//use p and do not free it.
return p;
}
:
[DllImport("C++.dll")]
private static extern string FunctionHavingAllocatedMemory(int i);
は今、私の質問は次のとおりです。Cの空きメモリへのニーズが存在する++モジュールまたはC#のモジュールが自動的に解放されますそれは機能が戻るときそれ。私はなぜC#が管理されているので、メモリを自動的にクリーンアップするのだろうと思っています。
(ただし、C++でメモリを解放するのは良いことですが、C++でメモリを解放できないという制約があります。マネージアプリケーションとメモリ管理の処理方法についてもっと理解したいと思っていました)