Ich bin auf einem C-Programm arbeiten, das immer wieder eine große Matlab Datenstruktur benötigt zuzugreifen. Dies ist ein grafikintensives Programm, das OpenGL verwendet, also muss es schnell sein.C Zeiger auf Matlab Variablen
Der wiederholte Zugriff auf diese Datenstruktur mit Matlab Engine scheint zu lang zu dauern (~ 10-20 ms für jeden Aufruf von engGetVariable und engPutVariable). Ich denke, das liegt daran, dass diese Funktionen die Daten im Speicher kopieren.
Statt also engGetVariable auf der Datenstruktur selbst, nun einen Zeiger auf die Datenstruktur zu erhalten, ich versuche. Wenn ich auf dem Zeiger engGetVariable aufruft, könnte ich auf die Datenstruktur in C zugreifen, indem ich den Zeiger dereferenziere, ohne die Daten zuerst in den Speicher kopieren zu müssen. Bisher konnte ich das jedoch noch nicht schaffen. Ist so etwas möglich?
// 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);
was gut ist die 'ap' Variable tun? Warum nicht einfach das 'mxArray', das einem' a' entspricht, aufrufen und 'mxGetPr' so oft wie gewünscht aufrufen? –
Was ist die Ausgabe, die Sie sehen? – AnonSubmitter85
Die 'a' Datenstruktur könnte in Matlab zwischen den Zeiten geändert werden, dass der Motor auf sie zugreift. Wenn "a" geändert wird, wird es scheinbar an einen anderen Speicherort kopiert, so dass 'mxGetPr' nicht auf die aktualisierte Kopie zeigt. –