最近我了解到,在.NET中进行固定处理并不是一个实际的过程。它只是在IL中创建一个固定的局部变量,而所有这个变量指向的东西都被GC视为固定状态。您可以在此处了解更多信息。
现在我想知道:是否有可能针对class
或struct
的字段进行固定,使得object
指向的内容被GC视为固定状态,而无需使用GCHandle
等工具?类似于以下的(伪代码!):
public unsafe [class|struct] Something
{
public byte[] Data = new byte[4096];
private /*some keywords*/ byte* ptr = /*some keywords like fixed*/ Data;
}
如果在常规C#中不可能实现,那么在使用IL时是否可以实现?或者
struct 或 class 字段不能使对象固定?(也许只有对于局部变量才可能实现?)
GC.AllocateArray
API,它允许创建已经固定的数组 - 这是OP试图做的事情。 - Konrad Kokosa