我正在学习使用C#分配和释放内存的不同方法。这是有效的示例代码。
class clsA
{
private IntPtr _buffer;
public clsA()
{
_buffer = Marshal.AllocHGlobal(1024);
//_buffer = Marshal.AllocCoTaskMem(1024);
}
public void free()
{
Marshal.FreeHGlobal(_buffer);
//Marshal.FreeCoTaskMem(_buffer);
}
}
class Program
{
static void Main(string[] args)
{
unsafe
{
List<clsA> l = new List<clsA>();
for(int i = 0; i < 8192; i++)
{
l.Add(new clsA());
}
Console.WriteLine("Added");
foreach (var a in l)
{
a.free();
}
Console.ReadLine();
}
}
}
内存分配按预期工作,但是在完成两个过程之后,取消分配后1-2 mb似乎会增加。最初,该应用具有4.6 Mb。分配后达到了预期的13.3 Mb。但是释放空间后,整个应用程序使用的是7.1 Mb。这到底是怎么回事?以及如何释放剩余空间。