2012-07-29 238 views
4
float **ThreadID; 
int Nthreads; 

如何在C#中執行以下任務?如何在C#中實現malloc操作#

ThreadID = (float **)malloc(Nthreads* sizeof(float *)); 
+6

你不會在C#中手動分配內存。 – 2012-07-29 17:21:45

+9

你爲什麼需要這樣做? .NET運行時是一個託管運行時 - 您不需要管理自己的內存。 – Oded 2012-07-29 17:22:04

回答

2
float[][] ThreadId; 
int NThreads; 

ThreadId = new float[Nthreads][]; 
3

有細節有任何理由,你的應用程序需要非託管內存? 否則,正常的方式做這將是

ThreadID = new float*[Nthreads]; 

這將分配一個新的磁盤陣列爲您服務。如果你在一個被稱爲很多的函數中使用這種語句,你可能需要添加stackalloc關鍵字。否則緩慢的垃圾收集可能會增加內存消耗。使用stackalloc時,它將被存儲在堆棧上並在離開該函數時被銷燬爲任何其他局部變量。

ThreadID = stackalloc float*[Nthreads]; 

編輯:由於C#中的所有指針,你需要聲明不安全的上下文爲您的功能,如

unsafe int doSomething(){ 
    ... 
} 
+2

+1你應該提到不安全。 – 2012-07-29 17:51:32

+2

@RitchMelton:+1用於提出我的錯誤 – Legionair 2012-07-29 18:17:45

+0

當使用ThreadID = new float * [Nthreads];它給錯誤說「不能隱式地將類型'float * []'轉換爲'float **'」 – user1561275 2012-07-30 07:06:14