5
float **ThreadID;
int Nthreads;

C#で以下のタスクを実行するには?

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

3 に答える 3

6

アプリケーションにアンマネージ メモリが必要な理由はありますか? そうでなければ、それを行う通常の方法は

ThreadID = new float*[Nthreads];

これにより、新しい配列が割り当てられます。頻繁に呼び出される関数でこの種のステートメントを使用する場合は、stackalloc-キーワードを追加することをお勧めします。そうしないと、ガベージ コレクションが遅くなり、メモリ消費量が増加する可能性があります。stackalloc を使用すると、スタックに格納され、関数を終了すると他のローカル変数として破棄されます。

ThreadID = stackalloc float*[Nthreads];

編集: C# のすべてのポインターと同様に、関数の unsafe コンテキストを次のように宣言する必要があります。

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 に答える