据我了解,C++ 属性 [[noreturn]]
可以应用于不返回调用者的函数,以便编译器可以生成更优化的代码。我确实理解它对“正常”函数有影响,但想知道将它应用于 main
函数时是否也会对性能产生影响。
假设我想编写一个不断运行的程序,它不会中止(意味着 main
函数永远不会返回给调用者(= 操作系统)
其中哪一个会生成更快(更优化)的代码,或者根本没有区别?
选项1:
int main()
{
while(true)
//..
return 0;
}
选项 2:
[[noreturn]] int main()
{
while(true)
//..
return 0;
}
最佳答案
noreturn
主要用于函数的调用者,而不是函数本身,在 main()
的情况下,main()
的调用者是 C++ 运行时,它是现成的,所以编译器无法编译它,所以有没有什么可以优化的。
然而,在您的 main()
中获得了一个微小的好处,因为理论上,noreturn
版本将生成稍小的代码,因为编译器可以省略称为结语的指令序列。
这些性能(速度/大小)的提升是微不足道的,并不值得过多关注。更有趣的是,如果您在调用 noreturn
函数后立即编写了任何代码,则可能会收到警告。在这种情况下,编译器应该能够警告您,您的这段代码将永远不会被执行。我觉得这更有用。
关于c++ - 将 [[noreturn]] 添加到 main 函数是否有意义,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43388089/