c++ - 将 [[noreturn]] 添加到 main 函数是否有意义

标签 c++ optimization program-entry-point noreturn

据我所知,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/

相关文章:

java - sbt 相当于 maven exec 插件

C++ 主文件不显示所有内容

c++ - 修复 DirectShow 上的像素纵横比 (PAR) 问题的最佳方法是什么?

c++ - 将一行文件读入一个对象中的2个变量

c++ - 如何调用 clang++ 或 g++ 来准确复制两个不同标准版本中的需求

opengl - 如何在游戏循环中计算直到最后一刻

c++ - 如何在 C++ 中对整数值进行位移

java - 解析字符串 "((1/2)/3/)4"和其他类似字符串的好方法

mysql - 有什么方法可以优化此MySQL查询吗? (资源密集)

在我的 C 程序中创建函数? - 获取 2 个文本文件的统​​计信息