Bonjour,
Est-ce que je peux compter sur le compilateur pour:
- Réécrire une boucle for itérant sur des indices et indexant les éléments d'un array par [i] en une boucle optimisée (probablement par arithmétique de pointeurs et déréférence). (Je préfère boucler sur des indices car c'est plus lisible à mon goût.)
- Compiler inline les petites fonctions utilitaires? (Même remarque, ces petites fonctions font office d'auto-documentation).
- Mettre en registre les données locales critiques, utilisées intensément, comme un accumulateur de boucle?
J'aimerais savoir cela pour gcc en particulier, mais aussi pour les compilateurs C en général. J'ai lu plusieurs fois que nos (ridicules, triciales) tentatives d'optimisation "manuelles" sont souvent inutiles, voire nuisibles. Aussi, à quoi servent les annotations comme inline et register si de toute façon le compilateur fait le boulot tout seul. D'autre part, y a-t-il quelque part une doc sur les niveaux d'optimisation (commandés par arguments en ligne de commande), ce que gcc fait ou pas, précisément, à chaque niveau d'optim (ça, c'est pour la culture générale :-)? Enfin, quel niveau recommander en "rapport qualité-prix" ;-), je veux dire à partir de quel niveau l'augmentation de quantité de travail par le compilateur ne vaut-elle plus le coup?
Le but, c'est d'avoir un code lisible, pas surchargé ni "distordu" pour gagner des micro-secondes à l'exécuition, et malgré tout une efficacité raisonnable.
Merci,
denis
Partager