跨平台C ++库中的内存分配

时间:2016-07-01 20:41:48

标签: c# android c++ cross-platform

我正在开发一个由C#(Xamarin)客户端使用的跨平台C ++库。

我的理解是,对于内存分配和来回传递,我有两个选择:

在我的非托管C ++代码中,使用CoTaskMemAlloc和SysAllocString进行分配,使用MarshalAs正确标记Interop Marshaler,以便运行时可以使用Marshal.FreeCoTaskMem()或Marshal.FreeBSTR()

删除内存

如果分配的内存作为IntPtr返回,则托管代码必须手动解组指针,然后使用适当的Free方法释放内存。

OR

在托管代码中,使用Marshal.AllocCoTaskMem方法分配内存,将缓冲区传递给非托管C ++库,让它填充并返回,最后在托管代码中,使用Marshal.FreeCoTaskMem释放内存。

这适用于Windows操作系统,但由于我的C ++库必须是跨平台的,Android或iOS上的等效内存分配/解除分配机制是什么?

我的理解是在C ++中使用malloc是不可取的,因为实现可能会有所不同。

由于

0 个答案:

没有答案