在 C 中调用其他较大函数的函数使用静态内联
Usage of static inline to functions which calls other larger functions in C
假设我有一个函数,
static inline int res( int x )
{
/** total() is a large func */
int processedPkts = total();
return ( processedPkts + x);
}
int total()
{
/** Where the function total() does lot of processing,counting no of packets
or say, it has many lines of code */
}
所以,我的问题是,我可以对 res()
函数使用静态内联,后者又会调用更大的函数吗?
根据我对 why/when 使用内联的理解,
it encourages the compiler to build the function into the code where it is used (generally with the goal of improving execution speed).
static inline is usually used with small functions that are better done in the calling routine than by using a call mechanism, simply because they are so short and fast that actually doing them is better than calling a separate copy.
因此,在汇编级别,total()
函数不受静态内联的影响(使用常规调用机制),因此建议对 res()
使用静态内联?
没关系。函数 total
可能不会被内联(将发出正常的函数调用)。函数 res
可能会被内联。
为什么可能。因为 inline
关键字只是一个建议。没有内联的函数也可以内联。编译器也可以内联 total
函数,如果它决定在某个优化级别上它将产生最佳代码生成。
许多编译器都有特殊的扩展,可以让您控制内联。例如:
gcc 有 __attribute__((noinline))
和 __attribute__((always_inline))
.
iar #pragma inline=never
和 pragma inline=force
假设我有一个函数,
static inline int res( int x )
{
/** total() is a large func */
int processedPkts = total();
return ( processedPkts + x);
}
int total()
{
/** Where the function total() does lot of processing,counting no of packets
or say, it has many lines of code */
}
所以,我的问题是,我可以对 res()
函数使用静态内联,后者又会调用更大的函数吗?
根据我对 why/when 使用内联的理解,
it encourages the compiler to build the function into the code where it is used (generally with the goal of improving execution speed).
static inline is usually used with small functions that are better done in the calling routine than by using a call mechanism, simply because they are so short and fast that actually doing them is better than calling a separate copy.
因此,在汇编级别,total()
函数不受静态内联的影响(使用常规调用机制),因此建议对 res()
使用静态内联?
没关系。函数 total
可能不会被内联(将发出正常的函数调用)。函数 res
可能会被内联。
为什么可能。因为 inline
关键字只是一个建议。没有内联的函数也可以内联。编译器也可以内联 total
函数,如果它决定在某个优化级别上它将产生最佳代码生成。
许多编译器都有特殊的扩展,可以让您控制内联。例如:
gcc 有 __attribute__((noinline))
和 __attribute__((always_inline))
.
iar #pragma inline=never
和 pragma inline=force