«GLOBAL может быть очень неэффективным»

Я использую (в Matlab) оператор global внутри команды if, поэтому я импортирую глобальную переменную в локальное пространство имен, только если она действительно необходимо.

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

  1. На самом деле это предупреждение означает, что « global сам по себе очень неэффективен, поэтому не используйте его в цикле». В частности, используя его внутри если, как и я, совершенно безопасно, и предупреждение выдается неправильно (и плохо сформулировано)

  2. Предупреждение правильное; Matlab использует какой-то действительно необычный механизм загрузки переменных в фоновом режиме, поэтому он действительно намного медленнее для импорта глобальных переменных внутри оператора if. В этом случае я хотел бы получить подсказку или указатель на то, как это материал действительно работает, потому что мне интересно, и это кажется важным, если я хочу писать эффективный код в будущем.

Какое из этих двух объяснений верно? (или, может быть, ни то, ни другое?)

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

РЕДАКТИРОВАТЬ: чтобы было понятнее: я знаю, что global работает медленно (и, очевидно, я не могу избежать его использования, поскольку это дизайнерское решение старой библиотеки, которую я использую); Я спрашиваю, почему анализатор кода Matlab жалуется на

if(foo==bar)
    GLOBAL baz
    baz=1;
else
    do_other_stuff;
end

, а не на

GLOBAL baz
if(foo==bar)
    baz=1;
else
    do_other_stuff;
end

. Мне трудно представить причину, по которой первый должен быть медленнее, чем второй.

6
задан RTbecard 24 December 2015 в 20:47
поделиться