Closed LRY89757 closed 2 years ago
感谢小彭老师给的解答,我这里总结下:
inline
比static
更节省空间,这个是不存在的,inline虽然会弱符号,但不代表多个文件会引用同一个实现,也就是说inline不比static节省“空间”,反而如果两个cpp里有同名inline函数有可能出错的风险另外关于forceinline的问题,ncnn的NCNNFORCEINLINE
是为了统一所有编译器的强制内联:
#if NCNN_FORCE_INLINE
#ifdef _MSC_VER
#define NCNN_FORCEINLINE __forceinline
#elif defined(__GNUC__)
#define NCNN_FORCEINLINE inline __attribute__((__always_inline__))
#elif defined(__CLANG__)
#if __has_attribute(__always_inline__)
#define NCNN_FORCEINLINE inline __attribute__((__always_inline__))
#else
#define NCNN_FORCEINLINE inline
#endif
#else
#define NCNN_FORCEINLINE inline
#endif
#else
#define NCNN_FORCEINLINE inline
#endif
小彭老师您好,我想请教一个static和static inline的问题,我网上查询的是如果这两个来修饰函数是几乎没有区别的,一下是我对两者的简单理解:
multi define
了。inline
属于那种如果多文件引用的话引用的是同一个函数,但是用static修饰的话那我们多个源文件引用就会每个文件都拷贝一份函数。static
修饰的函数那么每个源文件内部的变量是同一个。我在github上阅读的很多开源代码都是在头文件内定义函数的时候都是使用的
static inline
,我奇怪的一点是如果上面的理解是对的话,为什么还要加static,这样的话岂不是每个引用头文件的源文件都会有一个自己的函数拷贝?不如仅仅使用inline来所有源文件共享一个不是更好吗?或者说使用static inline
相比之下还有什么更深的考虑吗?谢谢小彭老师!