Tengo un archivo de Mex (compilado en VS2010, Matlab 2010b) que acepta una variable, y cambiarlo. Por ejemplo, en el archivo mex que parece:variables de Matlab muestran un comportamiento 'de referencia como' cuando se copian y se pasa a un archivo mex
double *fp = (double *)mxGetPr (prhs[0]);
*fp = someDoubleValue;
Con el fin de comparar la aplicación Matlab y la implementación mex, hago una copia de la variable antes de llamar al archivo de mex:
var_mex = var;
mymex (var_mex);
para mi sorpresa, tanto var_mex
y var
cambio (en el mismo valor, por supuesto), como si crea una referencia a var
y no una copia de la misma.
Es éste un problema conocido? ¿Cómo puedo convencer a Matlab para que copie la variable?
EDITAR
Desde que sospechaba que esta cuestión es el resultado de Matlab optimizar su gestión de memoria, he hecho un poco de cálculo "no hacer nada" en la var
antes de llamar al archivo de mex, es decir
var=var+1;
var=var-1;
y, de hecho, resuelve el problema. Todavía estaría contento de obtener algo de información (u otras sugerencias) sobre esto, si alguien lo encontraba también.
Parece ser por diseño pasando por [esta página] (http://www.mit.edu/~pwb/matlab/). Quizás puedas modificar el var_mex antes de pasarlo, como multiplicarlo por 1. O agregar 1 y luego restar 1 en dos pasos discretos. – tinman
sí, eso es exactamente lo que probé (y funcionó, ver mi edición). –
¿Ha leído la documentación de Matlab sobre [la gestión de la memoria de Matlab] (http://www.mathworks.co.uk/help/techdoc/matlab_prog/brh72ex-2.html)? Eso explica este comportamiento. – tinman