Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Documentation complète sur la compilation de programmes

57 réponses
Avatar
enae
Bonjour,

j'utilise quotidiennement de nombreux programmes pour toute tâche.

Après examen de tutoriels, livres de programmations et autres
ressources, je continue de me poser des questions sur le processus de
compilation de programmes.

Certes, le fichier sources est traduit en langage machine, certes, pour
ce faire il faut utiliser des options -o etc...
Mais existe-t-il réellement un manuel complet (ou ressource
informatique) abordant de façon concrète, claire et en profondeur les
points suivants:
- les différentes étapes du processus de compilation, leur utilité, le
fonctionnement en détail de celles-ci
- toutes les options possibles, chacune étant expliquée en profondeur
- des explications sur l'impact hardware lié à la compilation
- la compilation croisée
- les bonnes pratiques de programmation (exemple: indenter son code et
le commenter)

Je vous remercie d'avance pour votre aide.

10 réponses

1 2 3 4 5
Avatar
andre_debian
On Tuesday 29 December 2015 18:42:45 Vincent Lefevre wrote:
Il est très utilisé par GMP...
GMP exploite cela...



GMP = ?
Avatar
Vincent Lefevre
On 2015-12-29 21:42:50 +0100, wrote:
On Tuesday 29 December 2015 18:42:45 Vincent Lefevre wrote:
> Il est très utilisé par GMP...
> GMP exploite cela...

GMP = ?



https://gmplib.org/

--
Vincent Lefèvre - Web: <https://www.vinc17.net/>
100% accessible validated (X)HTML - Blog: <https://www.vinc17.net/blog/>
Work: CR INRIA - computer arithmetic / AriC project (LIP, ENS-Lyon)
Avatar
Basile Starynkevitch
On 12/29/2015 06:42 PM, Vincent Lefevre wrote:
On 2015-12-28 10:49:07 +0100, Basile Starynkevitch wrote:
L'assembleur n'est quasiment plus utilisé (sauf peut-être dans l'embarqué de
bas niveau, sur des petits microcontroleurs 8 bits avec quelques kilo-octets
de mémoire).


Il est très utilisé par GMP, car le langage C (qui est pourtant celui
de plus bas niveau) n'est pas vraiment conçu pour implémenter de la
multiprécision à base d'entiers.





Oui et non. C'est vrai que GMP -voir http://gmplib.org/ pour les
détails- utilise du code assembleur (notamment parce que les
instructions machine d'addition avec retenue très utiles en arithmetique
double précision ne sont pas accessibles en C99, mais GCC fournit
https://gcc.gnu.org/onlinedocs/gcc/Integer-Overflow-Builtins.html &
https://gcc.gnu.org/onlinedocs/gcc/x86-Built-in-Functions.html ...) mais
la très grosse majorité de GMP est codée en C, pas en assembleur. Seul
le sous repertoire mpn/x86_64 visible en
https://gmplib.org/repo/gmp-6.1/file/tip/mpn/x86_64 du code source de
GMP contient des fichiers assembleurs (pour x86-64).

Je n'ai pas fait le compte des lignes de code dans GMP, mais il me
semble bien que sur une machine donnée, les trois quarts au moins du
code binaire d'une librarie libgmp.so proviennent de fichiers C, pas de
fichiers assembleurs.

Bonne année à tous.

--
Basile STARYNKEVITCH http://starynkevitch.net/Basile/
email: basile<at>starynkevitch<dot>net mobile: +33 6 8501 2359
8, rue de la Faiencerie, 92340 Bourg La Reine, France
*** opinions {are only mine, sont seulement les miennes} ***
Avatar
jdd
you can also play with FORTH

https://packages.debian.org/stable/interpreters/gforth

very interesting language, pretty easy to learn, make low level a snap

jdd
Avatar
Sylvain L. Sauvage
Le jeudi 31 décembre 2015, 11:31:51 jdd a écrit :
you can also play with FORTH

https://packages.debian.org/stable/interpreters/gforth

very interesting language, pretty easy to learn, make low
level a snap



Euh, aurais-tu déjà commencé à arroser la nouvelle année?
;oP

--
Sylvain Sauvage
Avatar
jdd
Le 31/12/2015 13:01, Sylvain L. Sauvage a écrit :
Le jeudi 31 décembre 2015, 11:31:51 jdd a écrit :
you can also play with FORTH

https://packages.debian.org/stable/interpreters/gforth

very interesting language, pretty easy to learn, make low
level a snap



Euh, aurais-tu déjà commencé à arroser la nouvelle année?
;oP



peut-être. Je suis abonné aussi à la liste anglaise, du coup je ne sais
pas trop d'ou viennent le posts :-)

bref FORTH est un langage très sympa à tester, plutôt pour usage
individuel que collectif, mis il et très facile de coder en haut niveau
et de basculer au code machine ensuite au besoin

jdd
Avatar
Vincent Lefevre
On 2015-12-31 11:23:35 +0100, Basile Starynkevitch wrote:
Oui et non. C'est vrai que GMP -voir http://gmplib.org/ pour les détails-
utilise du code assembleur (notamment parce que les instructions machine
d'addition avec retenue très utiles en arithmetique double précision ne sont



multiprécision (avec des entiers), pas double précision (qui fait
référence à un format virgule flottante).

pas accessibles en C99, mais GCC fournit
https://gcc.gnu.org/onlinedocs/gcc/Integer-Overflow-Builtins.html &
https://gcc.gnu.org/onlinedocs/gcc/x86-Built-in-Functions.html ...)



En fait, le problème est probablement que GCC ne sait pas bien
optimiser certains codes. Soit on a le code assembleur en tête,
et autant écrire directement en assembleur (on est sûr que le
compilateur ne "désoptimise" pas de l'assembleur qui serait
retranscrit en C), soit on écrit du code C de manière un peu
arbitraire pour tous les processeurs, et une optimisation
demanderait des transformations non triviales pour certains
processeurs.

Si quelqu'un veut essayer du code C semi-générique, i.e. C avec
builtins de GCC, et comparer avec le code assembleur...

mais la très grosse majorité de GMP est codée en C, pas en
assembleur.



C'est normal: GMP est écrit par couches. J'aurais peut-être dû
préciser: la couche basse (mpn) de GMP. Cela fait tout de même
pas mal de fonctions. C'est non négligeable.

Seul le sous repertoire mpn/x86_64 visible en
https://gmplib.org/repo/gmp-6.1/file/tip/mpn/x86_64 du code source
de GMP contient des fichiers assembleurs (pour x86-64).



Idem pour chaque processeur (parfois il n'existe que le code générique
en C, mais c'est normalement du C ISO, sans builtins). Et note que
pour chaque architecture (e.g. x86_64), il y a du code spécifique
pour chaque sous-architecture (environ une dizaine pour x86_64).
Au total, ça fait beaucoup de code assembleur!

Je n'ai pas fait le compte des lignes de code dans GMP, mais il me semble
bien que sur une machine donnée, les trois quarts au moins du code binaire
d'une librarie libgmp.so proviennent de fichiers C, pas de fichiers
assembleurs.



Peut-être, mais si tu fais le total pour toutes les machines, le code
assembleur devient important.

Un ordre d'idée pour GMP 6.1.0:

cventin% ls **/*.asm(.) | wc -l
772
cventin% ls **/*.c(.) | wc -l
831
cventin% cat **/*.asm(.) | wc
136918 513735 3081440
cventin% cat **/*.c(.) | wc
145071 571333 3878004

Si on se restreint à la couche mpn:

cventin% ls **/*.asm(.) | wc -l
759
cventin% ls **/*.c(.) | wc -l
223
cventin% cat **/*.asm(.) | wc
136016 509834 3055279
cventin% cat **/*.c(.) | wc
39091 178321 1117751

Mais plus que la proportion par rapport au C, c'est plutôt en nombre
de lignes de code assembleur que c'est important: 136k.

Bonne année à tous.



Bonne année,

--
Vincent Lefèvre - Web: <https://www.vinc17.net/>
100% accessible validated (X)HTML - Blog: <https://www.vinc17.net/blog/>
Work: CR INRIA - computer arithmetic / AriC project (LIP, ENS-Lyon)
Avatar
andre_debian
Qui a écrit que l'Assembleur n'était plus beaucoup utilisé :

KolibriOS est un système d'exploitation, tout petit mais incroyablemen t
optimisé (OS Libre, publié en majorité sous licence GPL v2).

Ces performances sont atteintes grâce à l'écriture du coeur de KolibriOS
(noyau et pilotes) en langage * assembleur FASM * :
https://fr.wikipedia.org/wiki/FASM

Du fait de cette optimisation, il ne nécessite que quelques megaoctets
d'espace disque et seulement 8Mo de mémoire vive.

Le système démarre en moins de 10 secondes sur un PC à 100 €, de l'allumage à
l'affichage de l'interface graphique.

Les applications se lancent instantanément, sans avoir à supporte r de pointeur
en forme de sablier.

En savoir plus, installer KolibriOS :
http://kolibrios.org/fr/

Tiens, pour 2016, ça va nous changer de Linux :-)

André
Avatar
Vincent Lefevre
On 2016-01-01 22:50:37 +0100, wrote:
Qui a écrit que l'Assembleur n'était plus beaucoup utilisé :

KolibriOS est un système d'exploitation, tout petit mais incroyablement
optimisé (OS Libre, publié en majorité sous licence GPL v2).

Ces performances sont atteintes grâce à l'écriture du coeur de KolibriOS
(noyau et pilotes) en langage * assembleur FASM * :
https://fr.wikipedia.org/wiki/FASM

Du fait de cette optimisation, il ne nécessite que quelques megaoctets
d'espace disque et seulement 8Mo de mémoire vive.

Le système démarre en moins de 10 secondes sur un PC à 100€, de
l'allumage à l'affichage de l'interface graphique.

Les applications se lancent instantanément, sans avoir à supporter
de pointeur en forme de sablier.



La rapidité et le peu de mémoire nécessaire sont probablement plus
dûs à la simplicité du système qu'au fait que ce soit programmé en
assembleur.

--
Vincent Lefèvre - Web: <https://www.vinc17.net/>
100% accessible validated (X)HTML - Blog: <https://www.vinc17.net/blog/>
Work: CR INRIA - computer arithmetic / AriC project (LIP, ENS-Lyon)
Avatar
andre_debian
On Friday 01 January 2016 23:29:25 Vincent Lefevre wrote:
On 2016-01-01 22:50:37 +0100, wrote:
> Qui a écrit que l'Assembleur n'était plus beaucoup utilisà © :
> KolibriOS est un système d'exploitation, tout petit mais incroyabl ement
> optimisé (OS Libre, publié en majorité sous licence GPL v2).
> Ces performances sont atteintes grâce à l'écriture du co eur de KolibriOS
> (noyau et pilotes) en langage * assembleur FASM * :
> https://fr.wikipedia.org/wiki/FASM
> Du fait de cette optimisation, il ne nécessite que quelques megaoc tets
> d'espace disque et seulement 8Mo de mémoire vive.
> Le système démarre en moins de 10 secondes sur un PC à 1 00€, de
> l'allumage à l'affichage de l'interface graphique.
> Les applications se lancent instantanément, sans avoir à supp orter
> de pointeur en forme de sablier.

La rapidité et le peu de mémoire nécessaire sont probablem ent plus
dûs à la simplicité du système qu'au fait que ce soit programmé en
assembleur.



Qu'en sais tu ?
Tu sembles vouloir saborder KolibriOS sans le connaître.

Pourquoi KolibriOS serait-il "simple" ? :
alors fais la comparaison de vitesse avec des mini distributions Linux...
également réputées pour leur simplicité, je dirai plut ôt "dépouillé".
Leur site indique : "système d'exploitation tout petit mais incroyable ment
optimisé" (mais pas "simplicité).

L'assembleur étant le langage le plus proche du processeur (langage ma chine),
il a comme première qualité la rapidité de ses programmes.

André
1 2 3 4 5