float **ThreadID;
int Nthreads;
如何在C#中執行以下任務?如何在C#中實現malloc操作#
ThreadID = (float **)malloc(Nthreads* sizeof(float *));
float **ThreadID;
int Nthreads;
如何在C#中執行以下任務?如何在C#中實現malloc操作#
ThreadID = (float **)malloc(Nthreads* sizeof(float *));
您可以
Marshal.AllocHGlobal
嘗試你在MSDN上
http://msdn.microsoft.com/fr-fr/library/system.runtime.interopservices.marshal.allochglobal.aspx
float[][] ThreadId;
int NThreads;
ThreadId = new float[Nthreads][];
有細節有任何理由,你的應用程序需要非託管內存? 否則,正常的方式做這將是
ThreadID = new float*[Nthreads];
這將分配一個新的磁盤陣列爲您服務。如果你在一個被稱爲很多的函數中使用這種語句,你可能需要添加stackalloc關鍵字。否則緩慢的垃圾收集可能會增加內存消耗。使用stackalloc時,它將被存儲在堆棧上並在離開該函數時被銷燬爲任何其他局部變量。
ThreadID = stackalloc float*[Nthreads];
編輯:由於C#中的所有指針,你需要聲明不安全的上下文爲您的功能,如
unsafe int doSomething(){
...
}
+1你應該提到不安全。 – 2012-07-29 17:51:32
@RitchMelton:+1用於提出我的錯誤 – Legionair 2012-07-29 18:17:45
當使用ThreadID = new float * [Nthreads];它給錯誤說「不能隱式地將類型'float * []'轉換爲'float **'」 – user1561275 2012-07-30 07:06:14
你不會在C#中手動分配內存。 – 2012-07-29 17:21:45
你爲什麼需要這樣做? .NET運行時是一個託管運行時 - 您不需要管理自己的內存。 – Oded 2012-07-29 17:22:04