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

Objective c 从GCC中的单独文件内联函数,objective-c,c,gcc,inline,Objective C,C,Gcc,Inline,我的项目中有一个紧密的内部循环,它调用了一些辅助函数。为了获得最佳性能,这些简单函数声明为: BOOL isValidPoint(CGPoint point) __attribute__((always_inline)); 在我的ImageCommon.h文件中,并实现为: inline BOOL isValidPoint(CGPoint point); 共同点。换句话说,我总是希望这些函数内联 如果我从ImageCommon.m中的其他函数调用isValidPoint,反汇编输出将确认对i

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

BOOL isValidPoint(CGPoint point) __attribute__((always_inline));
在我的ImageCommon.h文件中,并实现为:

inline BOOL isValidPoint(CGPoint point);
共同点。换句话说,我总是希望这些函数内联

如果我从ImageCommon.m中的其他函数调用
isValidPoint
,反汇编输出将确认对
isValidPoint
的函数调用已被清除。但是如果我从另一个源文件调用这个函数,函数调用将保持不变——它不是内联的


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

如果希望将函数内联到其他编译单元中,则该函数的定义需要对这些编译单元可见(即,它需要在头中)


或者,您也可以根据您使用的编译器来进行链接时间优化。

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


基本上不内联任何东西-让编译器来做它

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


编辑:抱歉,我没有看到您在翻译单元中定义了此函数。还需要将定义移到带有“static inline”的.h才能工作。

我已经做了大量的评测。内联这些函数是绝对值得的,而编译器并不是独立完成的。您是如何进行分析的?您是否使用了整个程序优化,是否使用概要文件数据进行编译和重新编译,以帮助优化器了解情况?