【问题标题】:Value/Purpose of __attribute((const)) in gcc c++gcc c ++中__attribute((const))的价值/目的
【发布时间】:2020-03-20 16:51:54
【问题描述】:

在声明编译器可以看到的函数或静态成员不访问全局内存时,在 gcc 中为 c++ 程序使用__attribute((const)) 是否有任何价值?

例如,

int Add( int x , int y ) __attribute((const))
{
    return x+y;
}

编译器知道这个函数的内存访问范围是有限的。该属性是否添加任何内容?如果有,是什么?

谢谢,

乔什

【问题讨论】:

    标签: gcc optimization attributes g++


    【解决方案1】:

    GNU C 中的__attribute__((const)) 表达了函数作者的意图,即不依赖于输入参数以外的任何值。

    这允许编译器将具有相同参数的此类函数的多个调用优化为单个调用,而无需分析函数体。如果函数的主体在另一个翻译单元中,这尤其有用。

    int Add( int x , int y ) __attribute__((const)) 的情况下,对Add(2,3) 的多次调用可以合并为一个调用,并且可以缓存返回值,而无需知道Add 的实际作用。

    它还允许编译器验证函数是否真正符合声明的意图。

    有关更多详细信息和示例,请参阅this LWN article

    【讨论】:

    • 编译器如何需要这个?如果您有一个按值接收项目并且不引用任何外部变量的函数 - 编译器不应该解决这个问题吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多