Insolite : décortiquez le code généré par le compilateur du GCC

Logiciels

Avec GCC Explorer, il est possible de convertir du code C/C++ en assembleur en quelques étapes simples. Un outil pratique pour évaluer la qualité du code généré.

Matt Godbolt vient de lancer une application web originale : le GCC Explorer permet de voir en quelques clics les instructions assembleur générées par le GCC à partir d’un code source C ou C++. L’objectif de ce programme est de déterminer comment les options de compilations peuvent influer sur le code généré.

Nous avons réalisé divers tests avec le code “sum over array opt”. L’influence des options de compilation –Os (compacité) et –O3 (vitesse) est notable. Avec GCC 4.4.7, le premier cas comprend 24 lignes de code assembleur, pour 64 avec le second. En basculant vers le GCC 4.6.3, une compilation en –O3 génère 91 lignes de code. Optimisations maximales, mais compacité minimale !

Passons à l’architecture processeur ARM. Nous voyons que l’écart entre les différentes options d’optimisation se réduit. Ce phénomène a plusieurs explications : cette architecture processeur RISC 32 bits propose par définition peu de moyens de réduire la taille du code ; le code ARM est naturellement bien optimisé ; cette architecture est moins connue que le x86 et fait donc l’objet d’une moindre attention de la part des développeurs.

Suivre les évolutions du C et du C++

En quelques manipulations, nous avons pu mettre au jour des informations intéressantes (mais évidemment peu surprenantes pour un développeur chevronné).

Matt Godbolt s’est servi de son application pour évaluer l’impact des nouvelles fonctionnalités du C++11 sur le code généré. « Il est agréable de voir comment du code élégant se transforme en code machine beau, et peut-être même assez optimal », constate-t-il.

Dernier point, GCC Explorer est un projet open source, que vous pourrez donc librement télécharger, diffuser et modifier.

Crédit photo : © Rob – Fotolia.com.jpg


Lire la biographie de l´auteur  Masquer la biographie de l´auteur