У меня есть следующий код:Что именно происходит, когда -O3 установлен
int main()
{
int i=0;
for(i=0;i<10000000;i++)
//do something
return 0;
}
Когда я запускаю этот код, используя «НКУ -o файл file.c» команда, она становится выполнена в 244 милли секунд и когда я выполняю тот же код с помощью «gcc -O3 file.c -o file», он выполняется в 0 миллисекунд (очень мало времени, которое отображается как ноль). Я не мог понять, какая оптимизация выполняется с помощью флага -O3 таким образом, что мы получаем большую скорость при выполнении.
Любая ссылка, документ или разъяснение относительно оптимизации «-O3» (кроме gcc.gnu.org, которую я видел и нашел, информация, предоставленная там, не достаточна, чтобы предоставить мне достойное объяснение и понимание того, что происходит) очень ценится.
Возможно, он понимает, что никакой побочный эффект цикла не используется и заменяет nop – amdixon
. Предоставьте нам код сборки, сгенерированный gcc, если вы хотите узнать, что произошло в underhood. Прямо сейчас мы можем догадываться. Также я думаю, что в этом случае значение '// do something' имеет значение. – DawidPi
Это многое зависит от того, что * делает что-то! –