Чудя се, ако C + + компилатори ще развият цикъл, основан на обхвата, по същия начин, по който текущо правят за "нормални" цикли, за да увеличат максимално производителността, или в някои случаи цикли, основаващи се на обхват, ще бъдат по-бавни от нормалните контури?
Благодаря ти много.
Отговори:
7 за отговор № 1за диапазона на базата линия е еквивалентна на:
{
auto && __range = ( /expression/ );
for (auto __begin = begin(__range),
__end = end(__range);
__begin != __end;
++__begin) {
/declaration/ = *__begin;
/statement/
}
}
Ако компилаторът знае броя на повторенията и може да реши зависимостите на цикъла или циклите са независими, тогава компилаторът е свободен да се развърже.
Обикновено развъртането на цикли ще подобри производителността само за по-малки вериги. И така, IMO, няма значение дали разклоненията на базата на разстояния се развиват или не. Със сигурност можете да направите сравнителен анализ -O3
и -funroll-loops
и съответните опции, за да видите дали наистина има разлика между две.
5 за отговор № 2
Шансовете са, че компилаторите превеждат обхвата на базата на цикли в редовния им цикъл, затова бих очаквал, че те ще бъдат еквивалентни.