2016-08-08 2 views
2

я определил в базовой рабочей области с переменнойРабочее пространство функции Duplicate A Variable Input?

a = ones(10);

И я хотел бы создать функцию, которая вводит вектор vec1 и дает обратно vec2:

function vec2 = myfun(vec1) 

Operations with vec1 

end 

Lets сделать

b = myfun(a); 

В рабочем пространстве myfun мы будем иметь переменную, называемую vec1, которая имеет те же значения, что и a, но она не находится в базовой рабочей области.

Находясь в режиме отладки и использования

dbup; 

можно видеть две различные переменные a и vec1 в базовой и myfun Workspaces соответственно.

myfun дублирует переменную a в двух разных рабочих пространствах (и, следовательно, использует больше памяти)?

Если это не так, как это работает? Является ли это указателем, присваивающим две разные имена одной и той же информации?

Заранее спасибо.

ответ

3

MATLAB использует систему, обычно называемую «копирование при записи», чтобы избежать копирования входного аргумента внутри рабочего пространства функции до тех пор, пока вы не измените входной аргумент. Если вы не изменяете входной аргумент, MATLAB избегает делать копию. Например, в этом коде:

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

MATLAB не будет делать копию ввода в рабочей области functionOfLargeMatrix, поскольку x не изменяется в этой функции. Если с другой стороны, вы назвали эту функцию:

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

затем x модифицируется внутри рабочей области functionOfLargeMatrix2, и поэтому копия должна быть сделана.

+0

@Ander Biguri, Спасибо за редактирование. – Fartab

+1

Не беспокойтесь. Это отличный, простой, точный ответ. Отличная работа –

Смежные вопросы