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

Langage Pascal Discussion :

[LG]Librairie [dos,crt] dans mon main et dans mon unit ?


Sujet :

Langage Pascal

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14
    Points : 6
    Points
    6
    Par défaut [LG]Librairie [dos,crt] dans mon main et dans mon unit ?
    Salut,

    Bon il est tard, j'ai de la peau de saucisson sur les yeux car ça fait plus de 7h que je code ...donc j'vais essayer de faire des phrases françaises quand meme...


    Donc, deux questions :

    1/
    j'ai un programme, qui utilise les librairies dos,crt,graph et myunit. Les 3 premieres etant des librairies du langage pascal, la 4eme étant de mon propre crue.

    Or, dans myunit, j'uitilise aussi les librairies dos et crt.

    Donc je me demandais si à la compilation le bougre ne mettrais pas deux fois les librairies dos et crt dans l'exe ?

    2/
    Qu'est ce qui fait la taille de l'exe compilé sous Turbo Pascal 7 ? Mon programme a pris 10ko sans que j'ajoute de librairie...alors je suis entrain de me demander si le nombre de lignes n'influe pas sur la taille ?





    En vous remerciant messieux dames, moi jvais aller voir morphé, merci, ++

  2. #2
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 464
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 464
    Points : 4 311
    Points
    4 311
    Par défaut
    En ce qui concerne la compilation des unités, celles-ci ne sont inclues dans le programme qu'une seule fois... sinon le programme serait gigantesque (avec Turbo Vision par exemple, que demande beaucoup d'unités pour fonctionner à 100%).
    Pour la compilation, il parait évident que le nombre de ligne influe. Imagine, pour simplifier qu'une ligne correspond à 10 instructions en assembleur, chaque instruction étant codée sur 2,3 ou 4 octets. Sur un programme de 3 lignes on a un exe de 100 octets, et sur un programme de 1000 lignes on a un exe de 30 Ko. Bon tout ceci est faux, mais le principe est là. Il me semble aussi que TP rajoute du code "de base", mais c'est une autre histoire

    a+
    M.Dlb - Modérateur z/OS - Rédacteur et Modérateur Pascal

  3. #3
    Membre expert
    Avatar de Eric Sigoillot
    Inscrit en
    Mars 2002
    Messages
    1 212
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 212
    Points : 3 369
    Points
    3 369
    Par défaut
    Alors, allons-y gaiement

    Un compilateur ne sert pas qu'à transformer ton code en instruction machine : il effectue des optimisations.
    Il existe une chose bien cachée avec les compilateurs Pascal, et qui est bien visible avec les compilateurs C pour ne citer qu'eux : l'édition des liens.
    En effet, la compilation d'un programme s'effectue en plusieurs temps :
    • La "précompilation" qui va supprimer tout le code qui ne sert pas et regarder de près toutes les directives conditionnelles {$DEFINE}.
    • La compilation proprement dite, qui se charge d'assembler (donc de transformer en code machine) chaque sous-partie d'un programme (les procédures, etc...) et qui se charge d'optimiser le code si besoin est.
    • L'édition des liens, qui lie, c'est le cas de le dire, les différents éléments compilés séparément à l'étape précédente.


    L'étape qui nous intéresse est bien entendu l'édition des liens. C'est lors de cette étape que le compilateur va vérifier si un bout de code n'est pas utilisé plusieurs fois, et le cas échéant, celui-ci n'est inclus qu'une seule fois dans l'exécutable final.
    C'est le rôle du programme TLINK pour Borland, LINK pour d'autres compialteurs, etc... en effet, à l'issue des 2 première étapes, un compilateurs obtient un fichier objet .OBJ, et c'est le linker qui le "transforme" en fichier .EXE. Tu peux le vérifier aisément avec un compilateur C par exemple.



    En ce qui concerne la taille de l'exécutable, plusieurs choses influent. Tout d'abord, le code du programme ! Eh bien oui, plus un programme fait de choses, plus il prend de place, ça paraît logique. Mais ce n'est pas tout. Un programme est constitué de plusieurs segments. S'il y a les segments de code, il y a aussi les segments de données. Ainsi, si tu ajoutes des variables statiques à ton programme, alors sa taille va augmenter.
    Il est difficile de dire dans quelle proportion l'ajout d'une ligne va augmenter la taille de ton programme. Certaines instructions très courtes en Pascal peuvent se révéler bien plus longues en assembleur. Et qui plus est, certaines procédures/fonctions sont écrites directement en code machine avec l'instruction inline, ce qui force le compilateur non pas à créer un appel vers une procédure (ne prend que quelques octets), mais à insérer totalement le code de la procédure à l'endroit de l'appel (ce qui peut prendre plusieurs dizaines d'octets). C'est le prix de la performance...


    Voilà pour le speech un peu long, mais qui explique certaines choses à savoir.

    A+
    Règles du forum
    F.A.Q Pascal

    Pour me joindre (aucune question technique, merci)

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14
    Points : 6
    Points
    6
    Par défaut
    merci beaucoup !


    voila qui m'eclaire grandement..... si vou pouviez par ailleurs aller jetter un coup d'oeil sur le thread que je viens de poster tjrs sur le forum pascal ça serait sympa

    titre : "librairies : utiliser seulement quelques fonctions"



    merci

  5. #5
    Membre expert
    Avatar de Eric Sigoillot
    Inscrit en
    Mars 2002
    Messages
    1 212
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 212
    Points : 3 369
    Points
    3 369
    Par défaut
    Soit tu as fumé la moquette (ça te réussit pas de te coucher à plus de 5h du mat après 7h de code ), soit tu t'es planté quand tu as appuyé sur le bouton Envoyer. Quoiqu'il en soit, ton nouveau sujet n'est pas arrivé à destination.

    En passant, pense à ajouter le tag [Résolu] quand ton sujet est clos.

    Règles du forum
    F.A.Q Pascal

    Pour me joindre (aucune question technique, merci)

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14
    Points : 6
    Points
    6
    Par défaut
    nan j'ai pas fumé la moquette....c'est juste que j'ai repondu en "me projettant ds le temps" ...je pensais pas que tu serais aussi rapide a lire ma reponse, ...si rapide que j'ai pas eu le temps de finir le thread

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Extjs 4.1.1] Inclure des fichiers .js dans mon main js
    Par Belbarrin dans le forum Ext JS / Sencha
    Réponses: 3
    Dernier message: 29/08/2014, 17h30
  2. [Turbo Pascal] Librairies DOS, CRT ?
    Par Spout dans le forum Turbo Pascal
    Réponses: 3
    Dernier message: 06/09/2008, 10h50
  3. Rendre une variable public dans mon main
    Par djorfe dans le forum Débuter avec Java
    Réponses: 5
    Dernier message: 13/06/2008, 10h49
  4. Problème dans mon main
    Par pikaTuX dans le forum C
    Réponses: 10
    Dernier message: 10/12/2007, 14h21
  5. Erreur dans mon main
    Par diditin dans le forum Langage
    Réponses: 8
    Dernier message: 19/12/2006, 14h28

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