函数的工作区是否复制变量输入?
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 工作区中看到两个不同的变量 a
和 vec1
。
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);
然后 x
在 functionOfLargeMatrix2
的工作区内被修改,因此必须制作一个副本。
我在基础工作区定义了一个变量
a = ones(10);
我想创建一个函数,输入一个向量 vec1
并返回 vec2
:
function vec2 = myfun(vec1)
Operations with vec1
end
让我们
b = myfun(a);
在 myfun
的工作区中,我们将有一个名为 vec1
的变量,它与 a
具有相同的值,但它不在基础工作区中。
处于调试模式并使用时
dbup;
我可以分别在 base 和 myfun 工作区中看到两个不同的变量 a
和 vec1
。
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);
然后 x
在 functionOfLargeMatrix2
的工作区内被修改,因此必须制作一个副本。