У меня есть следующий код на С++ здесь:
#include <iostream>
int main(int argc, const char * argv[])
{
goto line2;
line1:
std::cout << "line 1";
goto line3;
line2:
std::cout << "line 2";
goto line1;
line3:
std::cout << "line 3";
goto line4;
line4:
std::cout << "Hello, World!\n";
return 0;
}
Если я сделал большую программу, скажем, из 10 000 строк кода, и решил, что никогда не буду использовать функции, которые пишу сам, я использую только операторы goto. Я использую только глобальные переменные. Я немного безумен с точки зрения лучших практик, но для очень конкретной цели. Вопрос в том, будет ли эффективно прыгать с операторами goto? Что делать, если у меня есть 1000 ярлыков goto?
Операторы goto транслируются непосредственно в машинный код, который говорит компьютеру просто ПЕРЕЙТИ на другой адрес памяти? Это более низкая стоимость машины, чтобы прыгать так, по сравнению со стоимостью вызова функции?
Я хочу знать, поскольку я хочу написать очень эффективную программу для выполнения некоторых вычислений, и мне нужно быть очень эффективным, не прибегая к коду сборки/машины.
Не нужно говорить мне, что это плохая идея с точки зрения обслуживания, понятности кода, лучших практик, я прекрасно это понимаю, я просто хочу получить ответ на вопрос. Я не хочу никаких споров о том, хорошо ли использовать вызовы функций или хорошо использовать goto.
Чтобы прояснить вопрос, я обеспокоен в этом случае использования gotos только с программой из 10 000 строк, чтобы сравнить ее с традиционной программой, использующей функции. Есть несколько способов сравнить и сопоставить эти две программы, например, как будет работать кэш ЦП. Какую бы экономию это дало без вызовов функций. Как это повлияет на кэш ЦП без стека вызовов, поскольку кэши ЦП обычно удерживают стек закрытым. Будет ли для этого случай, когда он может иметь отрицательный удар по производительности из-за неправильного использования кеша. Какова фактическая стоимость вызова функции по сравнению с скачком с точки зрения эффективности времени. Есть много способов сравнить и противопоставить два стиля программирования с точки зрения эффективности.