我在这里有以下 C++ 代码:
#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 好用之间争论。
为了澄清这个问题,在这种仅将 goto 与 10,000 行程序一起使用的情况下,我担心它与使用函数的传统程序相比如何。有多种方法可以对这两个程序进行比较和对比,例如 CPU 缓存将如何执行。如果没有函数调用,它将提供什么样的节省。如果没有调用堆栈,这对 CPU 缓存有何影响,因为 CPU 缓存通常会保持堆栈关闭。因此,是否会出现由于未正确使用缓存而导致性能下降的情况。与时间效率方面的跳跃相比,调用函数的实际成本是多少。有很多方法可以在效率方面比较和对比两种编程风格。