Рассмотрим следующем циклеОбъявление переменных внутри цикла
for(int i = 0; i < 99999999; i++)
{
double d1 = (double)i/10;
double d2 = (double)i/100;
std::cout << d1 * d2 << std::endl;
}
Из того, что я знаю, приложение будет выделять и свободные 16 байтов памяти в стеке (двойной 8 байт на моей машине) для каждой итерации в петле. Это правда, или компиляторы достаточно умны, чтобы знать, освободить память только тогда, когда цикл заканчивается?
Дело в том, что объявление переменной внутри цикла делает код более читаемым (imo).
Я думаю, это достаточно умно. – Maroun
Вы понимаете, что «выделение» памяти в стеке просто перемещает указатель стека процессора, правильно? Но да, компилятор почти наверняка выполняет единую настройку стека для всего, а не за итерацию. Проверьте вывод ассемблера. –
Вы можете добавить статический. Это гарантирует, что они будут выделены один раз. –