Intptr的释放问题

jonas401 2009-03-26 09:44:08
C#中申请内存大概有两种方式:
1 IntPtr Marshal.AllocHGlobal(int), 使用Marshal.FreeHGlobal(IntPtr)释放
2 IntPtr Marshal.AllocCoTaskMem(int), 使用Marshal.FreeCoTaskMem(IntPtr)释放

问题:
1 这两种内存方式有什么区别?哪种情况下使用哪种分配方式?
2 在下面这段代码中,是使用何种内存分方式?还是只是类型转换而未重新分析空间?
...
fixed (Int32* ptr = &CMD)
{
Marshal.Copy(new IntPtr(ptr), buffer, pos, size);
}
...
...全文
1299 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
jonas401 2009-03-26
  • 打赏
  • 举报
回复
OK,清楚了
kongdelu2008 2009-03-26
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 gomoku 的回复:]
CoTaskMemAlloc和CoTaskMemFree API一般用在COM交互的情况下。
而Marshal.FreeCoTaskMem(IntPtr)可以释放CoTaskMemAlloc申请的内存。

LocalAlloc和LocalFree API则可对应于Marshal.AllocHGlobal/Marshal.FreeHGlobal
[/Quote]
gomoku 2009-03-26
  • 打赏
  • 举报
回复
CoTaskMemAlloc和CoTaskMemFree API一般用在COM交互的情况下。
而Marshal.FreeCoTaskMem(IntPtr)可以释放CoTaskMemAlloc申请的内存。

LocalAlloc和LocalFree API则可对应于Marshal.AllocHGlobal/Marshal.FreeHGlobal
gomoku 2009-03-26
  • 打赏
  • 举报
回复
只是类型转换
jonas401 2009-03-26
  • 打赏
  • 举报
回复
人呢
格拉 2009-03-26
  • 打赏
  • 举报
回复
帮顶

111,098

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧