5
float **ThreadID;
int Nthreads;

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

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

3 回答 3

6

您的应用程序需要非托管内存有什么原因吗?否则正常的做法是

ThreadID = new float*[Nthreads];

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

ThreadID = stackalloc float*[Nthreads];

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

unsafe int doSomething(){
   ...
}
于 2012-07-29T17:39:36.767 回答
6

您可以尝试使用以下方法:

Marshal.AllocHGlobal 

详细信息在MSDN上。

于 2012-07-29T17:23:15.633 回答
3
float[][] ThreadId;
int NThreads;

ThreadId = new float[Nthreads][];
于 2012-07-29T17:28:03.600 回答