GCC手册的这部分非常模糊,我无法理解forceinline属性的反复尝试后使用。
我定义对象和某些功能来操作该对象。 ,这些功能可以使用原子操作,我想编译器内联的那些功能。 但是我不想写这些函数在头文件,并与“静态内联”就像在Linux内核中声明它们。
有没有办法迫使GCC从另一个转换单元内联函数?
GCC手册的这部分非常模糊,我无法理解forceinline属性的反复尝试后使用。
我定义对象和某些功能来操作该对象。 ,这些功能可以使用原子操作,我想编译器内联的那些功能。 但是我不想写这些函数在头文件,并与“静态内联”就像在Linux内核中声明它们。
有没有办法迫使GCC从另一个转换单元内联函数?
你可以使用always_inline
属性,例如:
void foo () __attribute__((always_inline));
从文档
always_inline一般来说,除非指定优化功能不被内联。 对于内联声明的函数,这个属性内联即使没有指定优化级别的功能。
注1:有没有必要使用inline
如果使用always_inline
属性
注2:如果函数不能被内联,你会得到一个警告,例如,如果然而编译时,在一个更高的优化GCC仍然可以内联成来电者的定义是不可用的,还有也太具体的开关:
-funit-at-a-time
从文档 :
优化级别-O2以上,特别是,使能单元-AT-一个时间模式,这允许编译器编译考虑的功能时从该文件中稍后的功能获得的信息 。 在单位,在一次一个模式编译一次多个文件到一个输出文件让编译器编译使用他们每个人在对来自所有文件获得的信息 。
注3:这是没有必要有一个明确的原型,所以你可以在功能确定指标使用属性:
__attribute__((always_inline)) void foo() {
//some code
}
也看到这个讨论 ,它回答大家的一些问题。