Tôi có tệp mex (được biên dịch trong VS2010, Matlab 2010b) chấp nhận biến và thay đổi. Ví dụ, trong file mex nó trông giống như:Biến Matlab hiển thị hành vi 'giống như tham chiếu' khi được sao chép và chuyển đến tệp mex
double *fp = (double *)mxGetPr (prhs[0]);
*fp = someDoubleValue;
Để so sánh việc thực hiện Matlab và việc thực hiện mex, tôi tạo một bản sao của biến trước khi gọi file mex:
var_mex = var;
mymex (var_mex);
Trước sự ngạc nhiên của tôi, cả hai var_mex
và var
thay đổi (với cùng giá trị của khóa học), như thể tôi đã tạo một tham chiếu đến var
chứ không phải bản sao của nó.
Đây có phải là sự cố đã biết không? Làm thế nào tôi có thể thuyết phục Matlab sao chép biến?
EDIT
Kể từ khi tôi nghi ngờ rằng vấn đề này là kết quả của Matlab tối ưu hóa quản lý bộ nhớ của nó, tôi đã làm một số "không làm gì cả" tính trên var
trước khi gọi file mex, tức là
var=var+1;
var=var-1;
và thực sự nó giải quyết được vấn đề. Tôi vẫn sẽ vui mừng nhận được một số thông tin (hoặc các đề xuất khác) về điều này, nếu ai đó gặp phải nó là tốt.
Dường như theo thiết kế đi theo [trang này] (http://www.mit.edu/~pwb/matlab/). Có lẽ bạn có thể sửa đổi var_mex trước khi truyền nó vào như nhân nó với 1. Hoặc thêm 1 rồi trừ 1 trong hai bước rời rạc. – tinman
có, đó chính xác là những gì tôi đã thử (và nó hoạt động, xem bản chỉnh sửa của tôi). –
Bạn đã đọc tài liệu Matlab về [quản lý bộ nhớ của Matlab] chưa (http://www.mathworks.co.uk/help/techdoc/matlab_prog/brh72ex-2.html)? Nó giải thích hành vi này. – tinman