C#Marshal.AllocHGlobal与Marshal.FreeHGlobal
作者:野牛程序员:2023-12-25 14:31:37C#阅读 3064
Marshal.AllocHGlobal 用于在非托管内存中分配指定大小的内存块,而 Marshal.FreeHGlobal 用于释放先前由 AllocHGlobal 分配的内存块。这两个方法通常用于与非托管代码进行交互,特别是在使用平台调用(P/Invoke)或其他需要在托管和非托管代码之间传递数据的情况下。
AllocHGlobal 的基本语法如下:
IntPtr ptr = Marshal.AllocHGlobal(size);
其中,size 是要分配的内存块的字节数。返回的 IntPtr 是指向分配的内存块的指针。
在使用完分配的内存后,应使用 FreeHGlobal 来释放它,以避免内存泄漏:
Marshal.FreeHGlobal(ptr);
请注意,使用这些方法需要小心,确保在正确的时间释放分配的内存,以防止内存泄漏和潜在的安全问题。在现代C#编程中,使用托管内存的需要相对较少,因为 .NET 框架提供了垃圾回收器来管理大部分内存。
以下是一个例子,演示了如何使用 AllocHGlobal 和 FreeHGlobal:
using System;
using System.Runtime.InteropServices;
class Program
{
static void Main()
{
// 分配 100 个字节的内存
IntPtr ptr = Marshal.AllocHGlobal(100);
// 在此处可以使用分配的内存,例如使用 P/Invoke 调用非托管函数
// 释放分配的内存
Marshal.FreeHGlobal(ptr);
}
}野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892

- 上一篇:C#中的byte*的复制
- 下一篇:C#分页的总页数算法
