gcc c++ 中 __attribute((const)) 的 Value/Purpose
Value/Purpose of __attribute((const)) in gcc c++
在声明编译器可以看到的不访问全局内存的函数或静态成员时,在 gcc 中为 c++ 程序使用 __attribute((const))
是否有任何价值?
例如,
int Add( int x , int y ) __attribute((const))
{
return x+y;
}
编译器知道这个函数的内存访问范围是有限的。该属性是否添加任何内容?如果是,是什么?
谢谢,
乔希
GNU C 中的 __attribute__((const))
表达了函数作者的意图,即不依赖于其输入参数以外的任何值。
这允许编译器将对此类函数具有相同参数的多个调用优化为单个调用,而无需分析函数体。如果函数的主体在另一个翻译单元中,这将特别有用。
在 int Add( int x , int y ) __attribute__((const))
的情况下,对 Add(2,3)
的多次调用可以合并为一个调用,并且可以缓存 return 值,而不知道 Add
确实如此。
它还允许编译器验证函数是否确实符合声明的意图。
有关详细信息和示例,请参阅 this LWN article。
在声明编译器可以看到的不访问全局内存的函数或静态成员时,在 gcc 中为 c++ 程序使用 __attribute((const))
是否有任何价值?
例如,
int Add( int x , int y ) __attribute((const))
{
return x+y;
}
编译器知道这个函数的内存访问范围是有限的。该属性是否添加任何内容?如果是,是什么?
谢谢,
乔希
__attribute__((const))
表达了函数作者的意图,即不依赖于其输入参数以外的任何值。
这允许编译器将对此类函数具有相同参数的多个调用优化为单个调用,而无需分析函数体。如果函数的主体在另一个翻译单元中,这将特别有用。
在 int Add( int x , int y ) __attribute__((const))
的情况下,对 Add(2,3)
的多次调用可以合并为一个调用,并且可以缓存 return 值,而不知道 Add
确实如此。
它还允许编译器验证函数是否确实符合声明的意图。
有关详细信息和示例,请参阅 this LWN article。