O que é inline estático em C (não C ++)? Eu, muito, estou confuso sobre por que muitas funções declaradas como ' inline estática ' no kernel do Linux.


Melhor resposta

Quando uma função é definida como estática , a função pode só pode ser visto e usado no mesmo arquivo de origem. Ele não pode ser chamado de fora do arquivo de origem onde está definido (a menos que um ponteiro de função seja usado para chamá-lo). A função está efetivamente “escondida” da visualização fora do arquivo de origem atual.

Quando uma função é definida como inline , você está perguntando o compilador para gerar o código interno da função exatamente onde ocorrem as chamadas de função, em vez de gerar chamadas para a função. Essa técnica pode melhorar o desempenho, eliminando a sobrecarga da chamada de função, mas pode, como consequência, aumentar a área de cobertura da memória do código gerado. No entanto, o compilador não tem obrigação de gerar o código da função embutido, então se a função for muito longa ou complexa, ou se o compilador simplesmente não puder fazer isso por algum motivo, uma chamada de função normal é gerada. É por isso que dizemos que inline é apenas uma dica para o compilador.

Colocá-los juntos, uma função que é definida como static e inline é aquele que será invisível fora do arquivo de origem atual, e aquele cujo código será ser gerado inline onde quer que você o chame, se o compilador puder fazer isso. Essa abordagem é comumente usada para funções auxiliares internas muito pequenas, simples e freqüentemente chamadas que não fazem parte de uma API pública.

Resposta

No caso de funções inline, o código em eles são copiados para a função de chamada sem a sobrecarga da chamada de função.

No kernel, é amplamente usado. Isso normalmente é feito como uma forma de melhorar o desempenho, mais otimização, embora não necessariamente o caso.

É usado principalmente para funções críticas de tempo pequeno e podemos ver uma grande diferença de desempenho ao fazer isso.

No entanto, mesmo se não estivermos usando a palavra-chave inline, o compilador pode tentar fazer inlining como parte da otimização.

Como regra geral, as funções inline estáticas devem estar em um cabeçalho. Ele define uma função embutida com ligação interna. Portanto, podemos dizer que tais funções serão locais para uma unidade de tradução e embutidas nela.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *