Мониторинг обменных курсов валют
18c0693f

Замена переменных константными значениями ("размножение" констант)


На жаргоне разработчиков оптимизирующих компиляторов замена переменных их непосредственными значениями называется "размножением" констант. Понять суть этого приема поможет следующий пример:

int a=0x666;

if (b > a) b=a;

Поскольку, непосредственное сравнение (равно как и присвоение) двух переменных невозможно, переменную 'a' предпочтительнее заменить ее непосредственным значением (обратите внимание: попутно это экономит одну операцию пересылки):

int a=0x666;

if (b > 0x666) b=0x666;

Размножать константы – дело не хитрое и это умеют делать практически все компиляторы, даже не имеющие титула "оптимизирующих". Но лишь немногие их них делают это правильно. Как уже было показано выше, наиболее оптимальная стратегия сочетает в себе использование регистров с непосредственными значениями.

Так вот, компиляторы Microsoft Visual C++ и WATCOM всегда, когда это возможно, заменяют переменные непосредственными значениями, не "подозревая" о том, что в некоторых случаях их целесообразнее помещать в регистры. Компилятор же Borland C++ вообще не способен размножать константы.






Самый выгодный курс обмена валюты