从GCC中的单独文件内联函数

时间:2011-10-19 03:57:18

标签: objective-c c gcc inline

我的项目中有一个紧密的内部循环,它调用了一些辅助函数。为了获得最佳性能,这些简单函数声明为:

BOOL isValidPoint(CGPoint point) __attribute__((always_inline));

在我的ImageCommon.h文件中,并实现为:

inline BOOL isValidPoint(CGPoint point);
ImageCommon.m中的

。换句话说,我总是想要内联这些函数。

如果我从ImageCommon.m中的其他函数调用isValidPoint,反汇编输出将确认已清除对isValidPoint的函数调用。但是如果我从另一个源文件调用此函数,函数调用仍然存在 - 它不是内联的。

是否可以内联在一个实现文件中调用但在另一个实现文件中定义的函数?

3 个答案:

答案 0 :(得分:3)

尝试将其声明为“静态内联”而不仅仅是“内联”。然后,编译器会将其视为翻译单元的本地,并且应该确定它确实可以内联。

编辑:抱歉,我没有看到您在翻译单元中定义了此功能。该定义还需要移动到.h,并使用“静态内联”工作。

答案 1 :(得分:1)

如果您希望将函数内联到其他编译单元中,那么该函数的定义将需要对那些编译单元可见(即,它必须位于标题中)。

或者,您可以使用链接时优化,这取决于您使用的编译器。

答案 2 :(得分:-2)

我的回答是你遵循90:10的优化规则。基本上90%的程序员知道要优化什么,所以他们有10%的机会猜测他们需要优化的10%的代码(从其他规则中删除)

基本上不要内联任何东西 - 让编译器去做吧