Compiler-explorer

Outils

Compiler-explorer

Suite à mon dernier post, @silmaril34 m'a suggéré de vous faire découvrir un site web bien pratique pour tester les options de compilation. Et il a sacrément raison ! Compiler-explorer fait partie de ces outils que l'on redécouvre régulièrement, au grès des tweets, puis que l'on n'arrive plus à retrouver quand il le faudrait :) Ce sera donc un petit article très court ce soir, juste histoire d'évoquer cette merveille.

C’est quoi donc ?

Matt Godbolt est l’auteur d’un outil en ligne du nom de compiler-explorer, accessible sur son site web à l’url suivante :

http://www.godbolt.org


Et honnêtement, cet outil est juste génial. Il vous permet de tester différentes versions de compilateur ainsi que différentes options de compilation, et de voir en temps réel le code assembleur généré. Le tout en ligne, sans rien installer sur votre machine. C’est l’outil idéal pour se lancer dans l’assembleur quand on connait le C, ou pour mieux comprendre la magie des optimisations gcc.

Un petit tour du propriétaire

Commençons simplement, avec une fonction C élémentaire :

#include <stdio.h>

void test_codices ( int num )
{
        int i ;
	for (i=0; i<num; i++)
	        printf(" Bonjour %d \n", i );
}

Il suffit de taper le code dans la partie gauche de l’écran, sélectionner le bon compilo, et c’est parti ! Le résultat est immédiat :

fig01

Comme vous pouvez le voir, le résultat est plutôt sexy. Petite mention spéciale pour la coloration, qui permet de déterminer aisément quelle partie du code correspond à quelles instructions en assembleur. Impressionnant non ? Je sens que vous adorez déjà cet outil :)

Tout ceci prend vraiment son sens si l’on cherche à comprendre l’influence de tel ou tel paramêtre de gcc sur le résultat de la compilation. Pour illustrer ceci, nous allons modifier très légérement notre fonction :

#include <stdio.h>

void test_codices_bis ( int num )
{
        int i,j ;
	for (i=0; i<num; i++)
	        printf(" Bonjour %d \n", i );
	for (j=0; j<5; j++)
		printf(" Hello !!! \n") ;
}

Comparons le résultat obtenu avec le même compilateur, mais en ajoutant l’option “-O2” :

fig02

Comme on pouvait s’y attendre, la seconde boucle (en rose) est traitée très différemment si l’optimisation O2 est activée. Etant donné que le nombre d’itérations est connu au moment de la compilation, cette boucle peut être “déroulée” … CQFD !

Le mot de la fin …

Je n’irai pas plus loin ce soir, à vous de jouer maintenant ! Avant de vous quitter, je voulais souligner le fait que le code source de ce magnifique outil est disponible sur Github. Les plus courageux pourront donc le déployer sur leur propre serveur :)

Voilà qui concluera ce petit post du soir … Amusez vous bien avec gcc et n’hésitez pas à commenter, corriger, etc ! Toute contribution est la bienvenue !

Seb

Dialogues & Discussions