__inline__ 是否会改变 local static variable 的行为?
原文中文,约18500字,阅读约需44分钟。
📝
内容提要
本文讨论了使用__inline__和__attribute__((always_inline))修饰函数时,对函数中的static变量的影响。文章指出,__inline__和__attribute__((always_inline))并不会改变static变量的行为,因为编译器会决定是否进行内联,应该将NS_INLINE函数视为静态函数。文章建议尽量不要在头文件中声明静态函数,除非清楚其用途。
❓
Q&A
__inline__ 和 __attribute__((always_inline)) 对 static 变量的行为有什么影响?
__inline__ 和 __attribute__((always_inline)) 不会改变 static 变量的行为,编译器决定是否进行内联。
为什么不建议在头文件中声明 static 函数?
在头文件中声明 static 函数会导致每个引入该头文件的编译单元都有一份副本,可能导致包大小增长和多重定义问题。
同一个 Compile Unit 中的 static 函数的 static 变量是如何共享的?
在同一个 Compile Unit 中,static 函数的 static 变量是共享的,只有一份副本。
不同 Compile Unit 中的 static 函数的 static 变量有什么区别?
在不同 Compile Unit 中,static 函数的 static 变量不是共享的,每个 Compile Unit 都有一份自己的副本。
使用 __inline__ 可以避免什么问题?
使用 __inline__ 可以避免链接时的多重定义错误,但不保证内联成功。
NS_INLINE 函数的默认属性是什么?
NS_INLINE 函数在正常情况下默认为 static 属性。
🏷️