(void **)&x と (void *)x の違いは何ですか? 私はあなたにいくつかのコードを提供します、私を助けてください。
float *xd;
int size=width*width*size(float);
cudaMalloc((void **)&x,size); 1
cudaMalloc((void *)x,size); 2
cudaMalloc(&x,size); 3
cudaMalloc(*x,size); 4
cudaFree(xd);
違いを知りたいだけです。
cudaMalloc() 関数の最初のパラメーターは、割り当て後に割り当てられたオブジェクトを指す必要があるポインター変数のアドレスです。関数は汎用ポインター値を想定しているため、ポインター変数のアドレスは (void **) にキャストする必要があります。メモリ割り当て関数は、特定のタイプのオブジェクトに限定されない汎用関数です。このアドレスにより、cudaMalloc() 関数は、割り当てられたオブジェクトのアドレスをポインター変数に書き込むことができます。3 cudaMalloc() 関数の 2 番目のパラメーターは、割り当てられるオブジェクトのサイズをバイト単位で指定します。この 2 番目のパラメーターの使用法は、C の malloc() 関数のサイズ パラメーターと一致しています。