Компиляторы: Loop-invariant code motion
От: Lorenzo_LAMAS  
Дата: 25.01.08 07:58
Оценка:
Не знаю, куда правильно поместить этот вопрос. "Средства разработки", ИМХО, не подходят.

Как компилятор анализирует, можно ли что-то выносить за пределы цикла?

Например:

for(....)//какие-то условия, не важно какие
{
    double d = 10./N;
    ///N нигде явно не меняется
}


и, допустим, N объявляется так:

int N = 100;
//а вот тут вызвали функцию f1
f1(&N);//и она сохранила адрес N
for(....)
{
    double d = 10./N;
    ///N нигде явно не меняется
    //зато вызываем f2, которая воспользуется сохраненным адресом
    f2();
}


Собственно, вопросы:

1) Если определения функций видны, способен ли компилятор осуществить какой-то анализ и определить, меняется N или нет?
2) Если способен, но не видит определений f1 или f2?
Есть ли что доступное в сети почитать про такое? (кроме исходников, конечно )
Of course, the code must be complete enough to compile and link.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.