Mise au point => static, inline et consorts
Bonjour à tous et toutes !
Je suis en train d'essayer d'optimiser un programme qui calcule des fft, et je vois, dans un code, que les fonctions qui reviennent très souvent sont passées en macro pour certaines et en "static inline" pour d'autres.
Je sais en gros ce que ça fait, mais j'aimerais avoir votre avis sur ce genre d'optimisation "basique". Est-ce efficace ?
Est-ce qu'il faudrait tout passer comme ça, ou seulement les fonctions simples, les plus appelées ?
Peut-on tout passer "les yeux fermés" ou y a-t-il des conditions à respecter ?
Merci d'avance aux gourous ;)
Re: Mise au point => static, inline et consorts
Citation:
Envoyé par progman
Je suis en train d'essayer d'optimiser un programme qui calcule des fft, et je vois, dans un code, que les fonctions qui reviennent très souvent sont passées en macro pour certaines et en "static inline" pour d'autres.
classique...
Citation:
Je sais en gros ce que ça fait, mais j'aimerais avoir votre avis sur ce genre d'optimisation "basique". Est-ce efficace ?
Ca peut... mais le choix, l'optimisation et le codage de l'algorithme sont aussi très déterminants.
Citation:
Est-ce qu'il faudrait tout passer comme ça, ou seulement les fonctions simples, les plus appelées ?
#2
Citation:
Peut-on tout passer "les yeux fermés" ou y a-t-il des conditions à respecter ?
- Passer son code au profiler pour déterminer les points de ralentissements.
- Eviter les macros et préférer les inline (C99)
- Attention, inline() n'est qu'une proposition. Si on utilise l'adresse de la fonction, l'inline ne se fera pas. Idem si elle n'est pas 'static'.
Re: Mise au point => static, inline et consorts
Citation:
Envoyé par Emmanuel Delahaye
- Passer son code au profiler pour déterminer les points de ralentissements.
- Eviter les macros et préférer les inline (C99)
- Attention, inline() n'est qu'une proposition. Si on utilise l'adresse de la fonction, l'inline ne se fera pas. Idem si elle n'est pas 'static'.
Peux-tu m'expliquer les deux derniers points ?
Je croyais que les macros c'était mieux :s.
Si tu appelles la fonction directement (elle est supposée inline), pas en passant par son adresse, ça fonctionne, c'est ça ?
Re: Mise au point => static, inline et consorts
Citation:
Envoyé par progman
Citation:
Envoyé par Emmanuel Delahaye
- Passer son code au profiler pour déterminer les points de ralentissements.
- Eviter les macros et préférer les inline (C99)
- Attention, inline() n'est qu'une proposition. Si on utilise l'adresse de la fonction, l'inline ne se fera pas. Idem si elle n'est pas 'static'.
Peux-tu m'expliquer les deux derniers points ?
Je croyais que les macros c'était mieux :s.
"Les macros c'est mal" notamment à cause de l'absence de contrôle des paramètres, des risques de double évaluation des paramètres, de la difficulté d'avoir une valeur de retour claire... Bref, en C90, c'est un pis-aller...
Citation:
Si tu appelles la fonction directement (elle est supposée inline), pas en passant par son adresse, ça fonctionne, c'est ça ?
Ca fonctionnne toujours. Simplement, si on a besoin explicitement de l'adresse, la fonction ne sera pas 'inlinée'.