Il existe 2 binaires. L'un est natif/non géré C++ dll et l'autre est géré C# exe. Maintenant, ce que je fais est d'écrire une fonction dans C++ dll et de la mémoire allouée à l'intérieur en utilisant malloc. J'ai exporté cette fonction pour être utilisée par mon module C#.Est-il nécessaire de libérer de la mémoire dans le code non managé lorsqu'il est chargé par le code managé
En C++ je l'ai fait:
char* FunctionHavingAllocatedMemory(int i){
char* p = (char*)malloc(100);
.....
//use p and do not free it.
return p;
}
En C# Je l'ai fait:
[DllImport("C++.dll")]
private static extern string FunctionHavingAllocatedMemory(int i);
Maintenant, ma question est: Y at-il besoin de libérer de la mémoire en C++ module ou C# module libre arbitre automatiquement quand la fonction reviendra. Pourquoi je pense que C# est un module géré, il nettoiera automatiquement la mémoire.
(Bien qu'il soit bon de libérer de la mémoire en C++ mais j'ai certaines contraintes que je ne peux pas libérer de mémoire en C++. Je voulais juste en savoir plus sur les applications managées et la gestion de la mémoire).