关于延迟复制:Matlab会不会复制传递给mexFunction的数据,这会修改它?
例如在
中myMex(input1(:,:,ii), input2(:,:,ii))
可以肯定的是,输入矩阵永远不会被复制,因此可以传入一些东西并修改它,而不必返回引用吗?
答案 0 :(得分:3)
在某些情况下,MATLAB会实施一些优化,以避免在calling functions时复制数据。
对于MEX函数,传递为const mxArray *prhs[]
的输入(prhs
是指向常量数据的指针数组)。尽管可以在不进行复制的情况下更改输入变量(通过丢弃常量),但它是dangerous并且没有得到官方支持,并且可能产生意外结果甚至是段错误(基于{{ 3}}技术)。官方答案是copy-on-write,并返回修改后的数组。
如果您愿意使用duplicate the input array,请参阅undocumented features等。以下是mxUnshareArray
,详细说明了这一点。