我需要獲取任意類型數組的第一個元素的內存地址,該數組存儲爲Object的一種類型。例如,數組可以是一個double []或一個int [],但是在代碼中它將被作爲一個Object輸入。獲取作爲對象存儲的數組的第一個元素的地址
儘管直接獲取已知類型數組的地址,但在C#中不允許獲取對象的地址。有沒有一種類型(除了對象),我可以用來存儲這樣一個數組,並且其內存地址可以更容易地獲得?或者有沒有辦法使用Interop/Reflection直接訪問地址,而無需中間數據複製?
請注意,在下面的第二行中,double []作爲一個對象存儲。並注意在fixed()行中,我試圖獲取o的地址,這在C#中是不允許的。
在此先感謝!
int len=100;
object o = new double [len];
unsafe
{
fixed(int*ptr=&o)
for (int index = 0; index < len; index++)
{
// access data directly to copy it, etc...
}
}
你爲什麼要這麼做? – 2011-12-30 22:24:04
這並不完全回答這個問題(因此它是一個註釋),但你可以通過聲明一個Array類型的引用並使用Array類來完成你想要的大部分操作(例如'Array.Copy ()'。 – phoog 2011-12-30 22:25:26
@Robert:我想自動執行一些與DirectCompute一起工作的任務,我想用GPU緩衝區綁定CPU結構數組,使用對象自動來回複製數據,並減少冗餘代碼的數量我寫了。可能有更好的方法,我可以使用,而不是不安全的代碼,但現在這會做。 – 2011-12-30 23:01:15