如何在C#中实现malloc操作#
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