0

关于惰性复制:Matlab 是否会复制传递给 mexFunction 的数据,并对其进行修改?

例如在

myMex(input1(:,:,ii), input2(:,:,ii))

可以肯定的是,输入矩阵永远不会被复制,这样就可以传入并修改它,而不必返回引用?

4

1 回答 1

4

在某些情况下,MATLAB 会实施一些优化以避免在调用函数时复制数据。

对于 MEX 函数,作为const mxArray *prhs[](传递的输入prhs是指向常量数据的指针数组)。尽管可以在不复制的情况下更改输入变量(通过抛弃常量),但它是危险的并且不受官方支持,并且可能产生意想不到的结果甚至段错误(由于写时复制技术)。官方的答案是复制输入数组,并返回修改后的数组。

如果您愿意使用未记录的功能,请参阅mxUnshareArray等。这是Yair Altman 的一篇文章,更详细地解释了这一点。

于 2014-09-21T12:59:13.547 回答