• [^] # Re: Re:questions relatives à l'execution d'un programme....

    Posté par . En réponse au message questions relatives à l'execution d'un programme..... Évalué à 3.

    Le principe de base est de rendre communes les fonctions d'un programme qui présentent un intérêt général.

    Exemple : Ouvrir une fenêtre. Il est bien sûr inconcevable que chaque programmeur réécrive lui-même le système X-Window depuis zéro pour pouvoir travailler. A la place, il va faire appel à une fonction de réputation publique (dont on mettra le prototype dans un *.h pour que le programme C sache comment l'utiliser).

    Ensuite, au moment de construire l'exécutable, on intégrera dans le fichier les fonctions de gestion de fenêtres, déjà compilées à cet effet. C'est donc une bibliothèque statique. C'est exactement comme un exécutable sauf qu'il n'y pas de point d'entrée.

    Par contre, quand il commence à y avoir beaucoup de programmes quu ouvrent des fenêtres, on se rend compte que d'une part les exécutables sont gargantuesques (toute la gestion du X est intégrée dans l'exécutable juste pour afficher Hello World à l'écran), et que d'autre part il est idiot de charger 15 fois en mémoire les même fonctions ! A la place, on ne va compiler que le nécéssaire et l'on va laisser "en l'air" les reférences à la bibliothèque partagée. Ce sera alors le boulot du système d'exploitation de charger LORSQUE C'EST NECESSAIRE les ressources dont un logiciel a besoin et de résoudre les noms de fonctions en adresse mémoire.

    En outre, et c'est là l'intérêt majeur, si la ressource réclamée a déjà été chargée pour un autre logiciel, il est inutile de la charger une deuxième fois (gain de temps), et les deux programmes peuvent appeler le même endroit (gain de place).

    Avantage de la compilation statique: On obtient un exécutable parfaitement autonome, ou presque, qui pourra fonctionner toutes les plateforme équipées d'un même OS. Inconvénient: Cela génère des exécutables gigantesques pour rien.

    Avatnage de la compilation dynamique: On ne compile que ce qui est nécéssaire, on gagne du temps et de la place, et quand on met à jour une fonction, cela se répercute immédiatement sur tous les programmes qui l'utilisent. Inconvénient, lorsque l'on installe un logiciel, il faut installer toute sa suite avec, vérifier si les libs ne sont pas déjà en place, etc. et gérer les dépendances en cascades (tel logiciel à beosin de telle lib, qui elle même s'appuie sur une autre lib, qui à son tour a besoin deux trois libs de plus bas niveau, etc.).