函数的工作区是否复制变量输入?

Does A Function's Workspace Duplicate A Variable Input?

我在基础工作区定义了一个变量

a = ones(10);

我想创建一个函数,输入一个向量 vec1 并返回 vec2:

function vec2 = myfun(vec1)

Operations with vec1

end

让我们

b = myfun(a);

myfun 的工作区中,我们将有一个名为 vec1 的变量,它与 a 具有相同的值,但它不在基础工作区中。

处于调试模式并使用时

dbup;

我可以分别在 base 和 myfun 工作区中看到两个不同的变量 avec1

myfun 是否在两个不同的工作区中复制变量 a(因此使用更多内存)?

如果不是这种情况,它是如何工作的?是不是一个指针给同一个信息赋予了两个不同的名字?

提前谢谢你。

MATLAB 使用通常称为 "copy-on-write" 的系统来避免在函数工作区内复制输入参数,直到或除非您修改输入参数。如果您不修改输入参数,MATLAB 将避免制作副本。例如,在这段代码中:

function y = functionOfLargeMatrix(x) 
     y = x(1);

MATLAB 不会复制 functionOfLargeMatrix 的工作区中的输入,因为 x 在该函数中没有被更改。另一方面,如果您调用此函数:

function y = functionOfLargeMatrix2(x) 
      x(2) = 2;  
      y = x(1);

然后 xfunctionOfLargeMatrix2 的工作区内被修改,因此必须制作一个副本。