Вопрос действительно специфичен для компилятора, а не для конкретного языка. И поскольку любой язык может иметь любое количество компиляторов, некоторые из них еще не написаны, невозможно дать общий ответ.
Большинство компиляторов автоматически удаляют ненужные локальные временные переменные, если это возможно. Очевидно, что значение должно храниться где-то мимоходом, но нет необходимости хранить его в основной памяти, если оно не упоминается позже в программе, и даже тогда оно все еще может быть доступно в регистре. Эта оптимизация относительно проста, поэтому я ожидаю, что это будет сделано любым компилятором, который делает любую оптимизацию.
Даже если компилятор здесь не оптимизирован, аппаратное обеспечение может помочь, параллельно делая хранилище. Даже если компилятор записывает и сразу считывает значение из основной памяти, процессор, вероятно, собирается захватить его из кеша, который будет только немного медленнее, чем доступ к регистру.
Есть языки, в которых эта оптимизация будет запрещена, поскольку переменные являются священными или, если честно, потому что семантика языка допускает интроспекцию или интерпретацию времени выполнения (например, с использованием встроенной функции eval
). В этом случае переменная должна существовать, несмотря на то, что она явно не упоминается, поскольку к ней может относиться некоторое использование интроспекции или динамической оценки. Это также означает, что создание переменных является нетривиальной операцией, поскольку это означает, что они хранят их с их именами в какой-либо постоянной структуре данных. Однако: языки этого типа редко компилируются, поэтому вся программа, вероятно, страдает от накладных расходов на перевод, гораздо более значительных, чем стоимость дополнительной переменной.
В целом, вы должны писать программы таким образом, чтобы их было легче всего понять. Это поможет вам избежать ошибок, помочь другим понять ваш код и даже помочь компилятору найти оптимальную оптимизацию. Вряд ли когда-либо полезно потратить мозговые усилия, чтобы беспокоиться о тривиальных деталях оптимизации. Вместо этого сосредоточьтесь на поиске наилучшего алгоритма для каждой задачи.
Вы можете [проверить код сборки] (http://stackoverflow.com/a/137074/2721883) для обоих. – clcto
Это правда. Однако мне интересно больше в общем случае. – Telavian
Ответ отсутствует. Например, на языках с чистыми функциями и ленивом eval однолинейный аргумент 'GetFinal' может даже не оцениваться, если он не используется, в то время как для четырехстрочной версии. Это даже до рассмотрения компиляции (или языков, где + не означает арифметику плюс). После компиляции каждый компилятор может иметь свою реализацию до тех пор, пока он соответствует, и такие оптимизации не применяются. В общем, сделайте макро-оптимизацию и позвольте микро-оптимизации компилятору, сосредоточьтесь на удобочитаемости, когда сомневаетесь. –