Matlab是否会复制传递给mex函数的数据?

时间:2014-09-21 11:48:01

标签: c matlab mex deep-copy copy-on-write

关于延迟复制:Matlab会不会复制传递给mexFunction的数据,这会修改它?

例如在

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

可以肯定的是,输入矩阵永远不会被复制,因此可以传入一些东西并修改它,而不必返回引用吗?

1 个答案:

答案 0 :(得分:3)

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

对于MEX函数,传递为const mxArray *prhs[]的输入(prhs是指向常量数据的指针数组)。尽管可以在不进行复制的情况下更改输入变量(通过丢弃常量),但它是dangerous并且没有得到官方支持,并且可能产生意外结果甚至是段错误(基于{{ 3}}技术)。官方答案是copy-on-write,并返回修改后的数组。

如果您愿意使用duplicate the input array,请参阅undocumented features等。以下是mxUnshareArray,详细说明了这一点。