Does GCC linha C ++ funções sem a 'inline' palavra-chave?
-
06-07-2019 - |
Pergunta
O GCC, quando compilar o código C ++, nunca tentar otimizar a velocidade, optando por funções embutidas que não são marcados com a palavra chave inline
?
Solução
Sim. Qualquer compilador é livre para inline qualquer função sempre que ele pensa que é uma boa idéia. GCC faz isso também.
No -O2 nível de otimização do inlining é feito quando o compilador acha que vale a pena fazer (a heurística é usada) e , se não irá aumentar o tamanho do código. No O3 é feito sempre que o compilador acha que vale a pena fazer, independentemente de ele irá aumentar o tamanho do código. Além disso, em todos os níveis de otimização (habilitado otimização que é), funções estáticas que são chamados apenas uma vez são inlined.
Outras dicas
Sim, especialmente se você tem um alto nível de otimizações habilitado.
Há uma bandeira que você pode fornecer para o compilador para desativar esse:. -Fno-inline-funções
Se você usar '-finline-funções' ou 'O3' ele vai funções inline. Você também pode usar '-finline_limit = N' para ajustar o quanto inlining ele faz.
"- O3 Esta opção ativa otimizações mais caros, como a função inlining "
Sim, é verdade, embora também irá gerar um corpo não-inline função para funções não-static
não inline
como este é necessário para chamadas de outras unidades de tradução.
Para funções inline
, é um erro para deixar de fornecer um corpo de função se a função é usada em qualquer unidade de tradução particular, de modo que este não é um problema.