Если вас беспокоит стоимость того или иного действия, измерьте это.Если вы не можете измерить разницу, тогда разница может не иметь значения (если она имеет значение, вы сможете ее измерить).
Чтобы ответить на более конкретный вопрос, переменная не имеет никакого значения.внутренняя стоимость.Переменные не существуют в коде, который фактически выполняется на процессоре.Они являются конструкцией уровня источника, и компилятор не обязан создавать какое-то отображение 1-к-1 между переменными исходного кода и, скажем, push
выполненными инструкциями, используемыми регистрами или чем-то еще.Одна переменная в вашем коде может соответствовать использованию нескольких разных регистров (время от времени компилятор может перемещать ее), или несколько разных переменных могут оказаться в одном и том же регистре, потому что они никогда не используются вв то же время.
Одна из многих функций, которые выполняет компилятор, - определение времени жизни переменной.Когда он используется впервые и когда он используется в последний раз?Не имеет значения, когда вы объявили об этом или когда он выходит из области видимости.
Преобразование, обычно используемое компиляторами для преобразования вашего кода в форму, более поддающуюся оптимизации, состоит в том, чтобы превращать каждое назначение в новую, уникальную переменную, в основном, как во втором примере.Именно так компилятор предпочитает работать с кодом, потому что теперь он может ясно видеть зависимости.В первом случае это выглядит так, как будто одна и та же переменная должна существовать во всей функции и использоваться повторно для обеих операций.Во втором случае мы можем легко видеть, что они являются отдельными, независимыми переменными, и мы видим, что их времена жизни не перекрываются (idNode
не используется после объявления rateNode
).
Обе версии, вероятно, будут генерировать точно такой же код, но вторая версия ближе к тому, что оптимизирующие компиляторы делают с кодом внутри.