大規模な Matlab データ構造に繰り返しアクセスする必要がある C プログラムに取り組んでいます。これは、OpenGL を使用したグラフィックを多用するプログラムであるため、高速である必要があります。
Matlab エンジンでこのデータ構造に繰り返しアクセスすると、時間がかかりすぎるようです (engGetVariable と engPutVariable の呼び出しごとに約 10 ~ 20 ミリ秒)。これは、これらの関数がデータをメモリにコピーするためだと思います。
したがって、データ構造自体で engGetVariable を使用する代わりに、データ構造へのポインターを取得しようとしています。ポインターで engGetVariable を呼び出すと、最初にメモリ内のデータをコピーしなくても、ポインターを逆参照することで C のデータ構造にアクセスできます。しかし、これまでのところこれを機能させることができませんでした。このようなことは可能ですか?
// Make vars in matlab workspace
engEvalString(ep, "a=9");
engEvalString(ep, "ap=getPointer(a)");
// Get variables in C
ap = engGetVariable(ep, "ap");
a = *mxGetPr(ap);
printf("a = %f", a);