Что работает быстрее?[Решено]

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

Что работает быстрее?[Решено]

Сообщение MonoBehaviour 28 июл 2013, 17:06

Какой вариант лучше для оптимизации?
Вообще, примеры неудачны, но думаю понятно, что я имел ввиду, в скриптах есть несколько переменных, которые используются только в апдейте, у некоторых значение известно сразу, у других нет, стоит ли их создавать заранее и копить подобный мусор или лучше создание, перед использованием?

Синтаксис:
Используется csharp
private int a = 1;
private int b = 2;
private int d;

void Update()
{
d = a + b;
}


Синтаксис:
Используется csharp
void Update()
{
int a = 1;
int b = 2;
int d = a + b;
}
Последний раз редактировалось MonoBehaviour 28 июл 2013, 17:41, всего редактировалось 1 раз.
MonoBehaviour
UNец
 
Сообщения: 7
Зарегистрирован: 23 июл 2013, 08:41

Re: Что работает быстрее?

Сообщение BornFoRdeatH 28 июл 2013, 17:10

MonoBehaviour писал(а):int a = 1;
int b = 2;
int d = a + b;


В подобном случае оптимизатор просто не позволит такой конструкции, и при компиляции будет int d = 3
Не бойся, если ты один, бойся, если ты ноль.
BornFoRdeatH
Адепт
 
Сообщения: 2377
Зарегистрирован: 22 окт 2011, 23:41
Откуда: Украина
Skype: bornfordeath

Re: Что работает быстрее?

Сообщение Woolf 28 июл 2013, 17:16

Вы не путаете константу и переменную?
Разработчик theFisherOnline - там, где клюёт
Разработчик Atom Fishing II - Первая 3D MMO про рыбалку
Разработчик Atom Fishing - Рыбалка на поплавок, донку, нахлыст, блесну в постъядерный период.
Аватара пользователя
Woolf
Адепт
 
Сообщения: 7179
Зарегистрирован: 02 мар 2009, 16:59

Re: Что работает быстрее?

Сообщение BornFoRdeatH 28 июл 2013, 17:20

Woolf писал(а):Вы не путаете константу и переменную?

Таки путаю, пардон. Неправ.

Ну а по сабжу, первое быстрее, но разница на столько не значительна, что можно считать что ее нет, на 10кк итераций ~2 миллисекунды выигрыш.
Не бойся, если ты один, бойся, если ты ноль.
BornFoRdeatH
Адепт
 
Сообщения: 2377
Зарегистрирован: 22 окт 2011, 23:41
Откуда: Украина
Skype: bornfordeath

Re: Что работает быстрее?[Решено]

Сообщение MonoBehaviour 28 июл 2013, 17:41

Спасибо
MonoBehaviour
UNец
 
Сообщения: 7
Зарегистрирован: 23 июл 2013, 08:41

Re: Что работает быстрее?

Сообщение KBEP 28 июл 2013, 20:57

BornFoRdeatH писал(а):
Woolf писал(а):Вы не путаете константу и переменную?
Ну а по сабжу, первое быстрее, но разница на столько не значительна, что можно считать что ее нет, на 10кк итераций ~2 миллисекунды выигрыш.

В C# доступ к куче быстрее доступа к стеку? О__О
Аватара пользователя
KBEP
Старожил
 
Сообщения: 598
Зарегистрирован: 24 сен 2012, 23:23
Откуда: Калининград, СПб, Северодвинск

Re: Что работает быстрее?[Решено]

Сообщение SevenDrip 31 июл 2013, 00:46

Приведённые примеры сравнивать по скорости нет смысла, потому что они делают совершенно разные вещи.

Первый пример в каждом кадре пересчитывает значение поля d на основе текущих значений полей a и b.

Второй пример не делает вообще ничего полезного. Предполагаю, что с большой долей вероятности он вообще ничего не делает. JIT-компилятор может спокойно выкинуть инициализацию локальной переменной d, потому что её значение нигде не используется и в принципе не может использоваться. Также он может выкинуть инициализацию a и b, потому что их значения теперь тоже нигде не используются. Останутся три неинициализированные неиспользуемые локальные переменные, под которые можно даже место в стеке не выделять.

Woolf писал(а):Вы не путаете константу и переменную?

JIT-компилятор (по крайней мере, майкрософтовский) умеет сворачивать целое выражение с участием переменных до простой константы, если видит, что результат выражения никогда не меняется. А во втором примере он это точно увидит.

Если бы значение d как-то потом использовалось, скорее всего, реальный выполняемый код выглядел бы как-то так:
mov [rsp+20h], 3
или
mov ebx, 3
SevenDrip
UNIт
 
Сообщения: 108
Зарегистрирован: 10 авг 2012, 18:56


Вернуться в Почемучка

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и гости: 29