6

我有一个函数,它只执行一些操作,例如增量。我已经声明了inline__attribute__((hot)).

Gcc Doc建议以下hot属性:

hot 属性用于通知编译器某个函数是已编译程序的热点。该功能进行了更积极的优化,并且在许多目标上它被放置在文本部分的特殊小节中,因此所有热门功能看起来都非常接近,从而提高了局部性。

这可以解释为对于非inline热函数,它们将被放置在进程地址映射的较低地址区域。但是inline函数调用应该被它们的代码替换。inline所以问题是和的组合如何hot真正起作用?

4

1 回答 1

1

请参阅何时应该为函数/方法编写关键字“内联”?inline对关键字的一个很好的解释。hot 将函数声明为and 似乎是矛盾的inline;如果函数未在头文件中定义,或者未在多个编译单元中定义,则不应将其声明为inline.

实际上,用函数定义替换函数调用并将其“内联”放置的决定取决于编译器。因此,和的组合inlinehot可能只是忽略了该inline部分并将其放置在text.hot程序的部分中。链接器是过程中唯一真正关心inline关键字的部分,然后它不一定会按照您的想法执行。

于 2012-06-12T23:05:53.610 回答