2012-07-29 243 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