我試圖找出如何使用fixed
關鍵字定義的固定指針如何工作。我的想法是,內部使用GCHandle.Alloc(object, GCHandleType.Pinned)
。但是,當我看着成下面的C#代碼產生的白細胞介素:`fixed`與GCHandle.Alloc(obj,GCHandleType.Pinned)
unsafe static void f1()
{
var arr = new MyObject[10];
fixed(MyObject * aptr = &arr[0])
{
Console.WriteLine(*aptr);
}
}
我再也找不到GCHandle
任何痕跡。
我看到固定指針在該方法中使用的唯一線索是下面的IL聲明:
.locals init ([0] valuetype TestPointerPinning.MyObject[] arr,
[1] valuetype TestPointerPinning.MyObject& pinned aptr)
因此被宣佈爲指針固定,而且不需要任何額外的方法調用,以壓住他。
我的問題是
- 有沒有在聲明中使用固定指針和使用
GCHandle
類釘住指針之間有什麼區別? - 有什麼辦法可以在不使用
fixed
關鍵字的情況下在C#中聲明固定指針?我需要這個在一個循環內連接一堆指針,而且我無法使用固定關鍵字來完成這個任務。