【发布时间】:2014-12-04 20:20:41
【问题描述】:
我正在开发一个需要重复访问大型 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);
【问题讨论】:
-
ap变量有什么用?为什么不直接获取与a相对应的mxArray,然后根据需要多次调用mxGetPr? -
你看到的输出是什么?
-
a数据结构可以在引擎访问它的时间之间在 Matlab 中进行修改。当a被修改时,它似乎被复制到了不同的内存位置,所以mxGetPr并不指向更新后的副本。 -
当前输出的数字不是
a中存储的数字,例如a = -128778304.000000。 -
printf("a = %lf", a);打印什么?
标签: c matlab matlab-engine