关于惰性复制:Matlab 是否会复制传递给 mexFunction 的数据,并对其进行修改?
例如在
myMex(input1(:,:,ii), input2(:,:,ii))
可以肯定的是,输入矩阵永远不会被复制,这样就可以传入并修改它,而不必返回引用?
关于惰性复制:Matlab 是否会复制传递给 mexFunction 的数据,并对其进行修改?
例如在
myMex(input1(:,:,ii), input2(:,:,ii))
可以肯定的是,输入矩阵永远不会被复制,这样就可以传入并修改它,而不必返回引用?
在某些情况下,MATLAB 会实施一些优化以避免在调用函数时复制数据。
对于 MEX 函数,作为const mxArray *prhs[]
(传递的输入prhs
是指向常量数据的指针数组)。尽管可以在不复制的情况下更改输入变量(通过抛弃常量),但它是危险的并且不受官方支持,并且可能产生意想不到的结果甚至段错误(由于写时复制技术)。官方的答案是复制输入数组,并返回修改后的数组。
如果您愿意使用未记录的功能,请参阅mxUnshareArray
等。这是Yair Altman 的一篇文章,更详细地解释了这一点。