@gfadrelle @bortzmeyer C'est faux au moins en théorie, tu peux utiliser tous les registres que tu veux en assembleur, après en pratique ça va être dur de mieux optimiser qu'un compilateur, pour tout un tas de raisons.
Par contre un compilo, même basique, va faire des optimisations comme:
- Éliminer le code non-utilisé (d'où volatile en C pour les variables, pour indiquer au compilo' qu'en fait si, y'en as besoin);
- Dédupliquer le code, ça arrive de se répéter, surtout dans des gros projets;
- Réordonner les structures pour prendre moins de mémoire, mais sans casser l'alignement;
- Utiliser les extensions CPUs (SSE2, AVX, …), assez casse-pied à écrire, faciles à oublier, et pas présentes dans tous les CPUs;
- Si tu dit d'optimiser pour la taille et sur des architectures comme x86_{32,64} c'est utiliser des instructions équivalentes mais qui prennent moins de place une fois assemblées;
Et avec un compilo' un peu avancé et pour architecture super-scalaire (la plupart actuellement le sont), tu va avoir le code agencé pour que le CPU puisse exécuter plusieurs instructions indépendantes en même temps.