Pracuję nad programem C, który musi wielokrotnie uzyskiwać dostęp do dużej struktury danych Matlab. Jest to intensywny program graficzny wykorzystujący OpenGL, więc musi być szybki.C wskaźniki do zmiennych Matlab
Wielokrotny dostęp do tej struktury danych za pomocą Matlab Engine wydaje się trwać zbyt długo (~ 10-20 ms dla każdego wywołania engGetVariable i engPutVariable). Myślę, że dzieje się tak, ponieważ te funkcje kopiują dane w pamięci.
W ten sposób zamiast używać metody engGetVariable w samej strukturze danych, teraz próbuję uzyskać wskaźnik do struktury danych. Jeśli wywołasz engGetVariable na wskaźniku, mógłbym uzyskać dostęp do struktury danych w C przez odwołanie do wskaźnika, bez konieczności wcześniejszego kopiowania danych do pamięci. Jednak do tej pory nie udało mi się tego sprawić. Czy coś takiego jest możliwe?
// 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);
Co dobrego robi zmienna 'ap'? Dlaczego po prostu nie dostaniesz 'mxArray' odpowiadającego" a ", i wywołasz' mxGetPr' tyle razy ile chcesz? –
Jakie wyniki widzisz? – AnonSubmitter85
Struktura danych "a" może być modyfikowana w programie Matlab w czasie, gdy silnik uzyskuje do niej dostęp. Kiedy 'a' jest zmodyfikowane, wydaje się, że jest kopiowane do innej lokalizacji w pamięci, więc' mxGetPr' nie wskazuje zaktualizowanej kopii. –