Мой вопрос об использовании памяти при взаимодействии DLL в .Net (я использую C#, но ответ должен применяться к другим .Net-языкам).Dll interop и управление памятью относительно массивов
Скажем, у меня есть функция C в DLL, который принимает массив:
extern __declspec(dllexport) void Func(int * arr, int len);
У меня есть выбор из двух соответствующих вызовов в C#:
[DllImport("Lib.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern void Func([In] IntPtr arr, [In] int len);
Или:
[DllImport("Lib.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern void Func([In] int[] arr, [In] int len);
Если функция C не освобождает массив, последний метод взаимодействия вызовет утечку памяти, предположив функцию C будет освобождать маршаллированный массив или система interop знает, чтобы освободить маршаллированный массив?