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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top