如何在C#中实现malloc操作

时间:2012-07-29 17:21:03

标签: c# memory-management

float **ThreadID;
int Nthreads;

如何在C#中执行以下任务?

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

3 个答案:

答案 0 :(得分:4)

您的应用程序是否需要非托管内存? 否则,通常的方法是

ThreadID = new float*[Nthreads];

这将为您分配一个新阵列。如果在一个被调用的函数中使用这种语句,则可能需要添加stackalloc-keyword。否则慢速垃圾收集可能导致内存消耗增加。使用stackalloc,它将存储在堆栈中,并在离开函数时作为任何其他局部变量销毁。

ThreadID = stackalloc float*[Nthreads];

编辑:与C#中的所有指针一样,您需要声明函数的不安全上下文,例如

unsafe int doSomething(){
   ...
}

答案 1 :(得分:3)

您可以尝试使用

Marshal.AllocHGlobal 

您有关于msdn的详细信息

http://msdn.microsoft.com/fr-fr/library/system.runtime.interopservices.marshal.allochglobal.aspx

答案 2 :(得分:3)

float[][] ThreadId;
int NThreads;

ThreadId = new float[Nthreads][];