Sat*_*hum 2 c static gcc inline compiler-optimization
假设我有一个函数,
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 */
}
Run Code Online (Sandbox Code Playgroud)
所以,我的问题是,我可以使用静态内联res()函数来调用更大的函数吗?
根据我对为什么/何时使用内联的理解,
它鼓励编译器将函数构建到使用它的代码中(通常是为了提高执行速度)。
静态内联通常与小函数一起使用,这些函数在调用例程中比使用调用机制更好地完成,仅仅是因为它们如此短且快,以至于实际执行它们比调用单独的副本更好。
因此,在汇编级别,total()函数不受静态内联影响(使用常规调用机制),因此建议对res()?使用静态内联。
不要紧。该函数total可能不会被内联(将发出正常的函数调用)。函数res可能会被内联。
为什么可能。因为inline关键字只是一个建议。没有内联的函数也可以内联。如果编译器total决定在一定程度的优化上它将产生最佳的代码生成,则编译器也可以内联该函数。
许多编译器都有特殊的扩展,可以让您控制内联。例如:
海湾合作委员会有__attribute__((noinline))和__attribute__((always_inline)).
和#pragma inline=neverpragma inline=force