IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

scinder les librairies pour optimiser le code produit


Sujet :

C

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2004
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juin 2004
    Messages : 53
    Points : 35
    Points
    35
    Par défaut scinder les librairies pour optimiser le code produit
    Après quelques compilations de programmes, je mes suis aperçu que ce qui faisait augmenter la taille du code produit (exécutable) sont les librairies qu'on inclus dans le source du programme.
    Question : si on n'utilise qu'une petite partie des librairies, est ce que le compilateur permet d'intégrer uniquement la partie utile de la librairie dans le code exécutable ?

  2. #2
    Expert confirmé Avatar de fregolo52
    Homme Profil pro
    Développeur C
    Inscrit en
    Août 2004
    Messages
    2 366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Août 2004
    Messages : 2 366
    Points : 5 379
    Points
    5 379
    Par défaut
    Salut,

    Si je ne raconte pas de connerie, c'est ce que fait le compilo de Visual C++.

    Les 'lib statiques' te feront obligatoirement grossir ton binaire. Si tu veux un petit binaire, tu vas devoir linker des 'lib dynamiques' (pas toujours possible).

  3. #3
    Membre confirmé Avatar de Flow_75
    Femme Profil pro
    Ingénieure
    Inscrit en
    Mai 2005
    Messages
    1 096
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieure
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 096
    Points : 633
    Points
    633
    Par défaut
    Citation Envoyé par fregolo52 Voir le message
    Salut,

    Si je ne raconte pas de connerie, c'est ce que fait le compilo de Visual C++.

    Les 'lib statiques' te feront obligatoirement grossir ton binaire. Si tu veux un petit binaire, tu vas devoir linker des 'lib dynamiques' (pas toujours possible).
    En effet, sauf qu'il faudra donner les librairies Dll associés de toute facon.

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2004
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juin 2004
    Messages : 53
    Points : 35
    Points
    35
    Par défaut
    Est ce que c'est faisable avec gcc.
    Et est-ce applicable a un environnement linux ?
    Ou trouver des exemples ?
    Merci d'avance.

  5. #5
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 393
    Points : 23 740
    Points
    23 740
    Par défaut
    Tous les systèmes d'exploitation savent aujourd'hui gérer les bibliothèques statiques et dynamiques. Unix l'a fait très tôt, et ça fonctionne depuis toujours sous Linux. Lorsque tu utilises une bibliothèque partagée, celle-ci n'est chargée qu'une seule fois en mémoire pour toutes les applications qui l'utilisent, et son image est mappée en mémoire plutôt que chargée de manière ordinaire.

    C'est alors le même système de pagination que pour la mémoire swap qui va entrer en jeu. Seuls seront chargés, non pas les fonctions elles-mêmes, mais les tronçons du fichier qui sont réellement utilisés. Mais cela va se passer au niveau du système d'exploitation lui-même, en dessous du loader de bibliothèque. Enfin, il est possible de faire du lazy loading, qui consiste à charger automatiquement le code nécessaire, mais seulement si on en a besoin au moins une fois, et pas systématiquement au lancement du programme.

    Tu utilises probablement déjà plusieurs bibliothèques partagées sans le savoir. Si tu as déjà compilé un exécutable sous Linux avec GCC, tape « ldd nomdetonexécutable » dans un Shell.

    Sache également que ce qui fait grossir la taille d'un exécutable, ce sont en général la table des symboles et les informations de déboguage. Une fois que ton exécutable fonctionne bien, fais « strip nomdetonexécutable » pour lui faire faire un régime sévère.

Discussions similaires

  1. peut-on utiliser les CLR pour appeler du code Java ?
    Par Mathusalem dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 16/09/2008, 13h42
  2. PreparedStatment : conseils pour optimiser mon code
    Par Monkey_D.Luffy dans le forum JDBC
    Réponses: 8
    Dernier message: 30/05/2008, 13h49
  3. [IVR]Ou trouver les librairies pour Linux ?
    Par muad'dib dans le forum C
    Réponses: 1
    Dernier message: 10/01/2008, 15h11
  4. [JAVA / Out Of Memory] Aide pour optimiser du code
    Par shaun_the_sheep dans le forum Général Java
    Réponses: 7
    Dernier message: 06/02/2007, 09h58
  5. Besoin d'aide pour optimiser du code
    Par scaleo dans le forum Langage
    Réponses: 1
    Dernier message: 07/01/2007, 13h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo