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

Langages de programmation Discussion :

Plusieurs sous-programmes ou un programme avec plein de conditions ?


Sujet :

Langages de programmation

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    245
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2007
    Messages : 245
    Points : 110
    Points
    110
    Par défaut Plusieurs sous-programmes ou un programme avec plein de conditions ?
    Juste une question d'ordre generale sur la conception d'un programme

    j'ai pour le moment fait plusieurs programme qui se ressemble pas mal et je me demandais si au lieu d'appeler a chaque fois un programme different je ferais pas mieux d'appeler tous le temps le meme programme et mais des choix, genre je met une variable d'entree en plus en appelant le programme, cette variable c'est choix

    et je fais if choix eq "tant" , j'execute telles lignes, if choix eq .... telles autres lignes

    je voudrait en fait savoir si ca change quelque chose au niveau des ressources du pc ou pas

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    moins d'overhead (dû au moindre temps de chargmement du prog en mémoire), mais plus de mémoire utilisée..

    Tout dépend du prog.

    En général beaucoup mieux un seul prog, sauf si les fonctionalités sont vraiment disjointes...
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    245
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2007
    Messages : 245
    Points : 110
    Points
    110
    Par défaut
    en fait j'ai deja beaucoup de memoire utilise vu que je travaille sur des series de matrices de 120 millions d'elements, apres interpolations (a la base il y en a 40 millions)

    le programme, apres interpolation, se resume en gros a des boucles sur les elements et a des series de tests sur leur valeur, sur des gradients locaux, et a du "coloriage" si les test sont concluant, pour finir par afficher ces images coloriees

    les fonctionalites sont assez proches


    je pars donc sur un seul programme ?
    (j'ai du mal a evaluer ce qu'est "beaucoup" de memoire utilisee)

  4. #4
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    ne pas confondre aussi taille du programme et taille des données...

    Tout dépend encore une fois.. C'est à toi de peser le pour et le contre...

    Mais tu peux aussi faire un peu un système de DLL...
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    245
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2007
    Messages : 245
    Points : 110
    Points
    110
    Par défaut
    qu'est ce qu'un systeme de dll ?

  6. #6
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    Dynamically Linked Library

    Voir

    http://fr.wikipedia.org/wiki/Dll

    http://www.linux-france.org/prj/jargonf/D/DLL.html

    Avec extension .dll sous Windows, .so sous systèmes unixoides.

    En gros, c'est une biblothèque de fonctions comme une autre, sauf que, à l'édition de liens, au lieu de copier le code compilé dans le binaire (ce qui se passe avec une bibliothèque normale), on copie l'adresse PHYSIQUE de la fonction.

    Avantage : le binaire est moins gros..

    Inconvénients :
    1) le binaire n'est plus autonome (il faut toujours fournir la bibliothèque)
    2) il doit toujours être à la même place physique (même répertoire/sous-répertoire/etc..)
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    245
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2007
    Messages : 245
    Points : 110
    Points
    110
    Par défaut
    ok merci bien

    pour les inconvenients c'est pas important,

    j'arrive jamais a utiliser des fonctions deja existante donc j'ai tout recree et fait ma propre bibliotheque

    y a que les fonctions vraiment de base que j'ai pas recre (car je saurais pas comment faire) mais y a pas besoin de les chargees elles


    merci en tout cas pour ces reponses,
    je pense pouvoir m'en sortir maintenant

  8. #8
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par svagrim
    j'arrive jamais a utiliser des fonctions deja existante donc j'ai tout recree et fait ma propre bibliotheque

    y a que les fonctions vraiment de base que j'ai pas recre (car je saurais pas comment faire) mais y a pas besoin de les chargees elles
    euh je crois que tu n'as pas compris....

    C'est vrai pour n'IMPORTE QUELLE bibliothèque, y compris la tienne...

    C'est uniquement une instruction de stockage de la bibliothèque : statique ou dynamique.
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    245
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2007
    Messages : 245
    Points : 110
    Points
    110
    Par défaut
    ba en fait il est fort possible que j'ai pas compris mais voila comment j'avais interprete les choses :

    tu as dit:

    Citation Envoyé par souviron34
    Dynamically Linked Library

    1) le binaire n'est plus autonome (il faut toujours fournir la bibliothèque)
    2) il doit toujours être à la même place physique (même répertoire/sous-répertoire/etc..)
    comme je l'ai dit, j'ai recree ma bibliotheque, elle est dans un fichier qui est ratache aux autres fichiers programme

    qqun de mon bureau les a "lie" (c'est a dire si on veut en copier un ou en deplace un, ca prend tous les autres fichiers lies avec automatiquement)

    et idl est prevu pour prendre en compte la bibliotheque cree par un utilisateur en priorite si une fonction existe dans plusieurs bibliotheque

    donc j'avais compris que dans ce cas, les inconvenients ne me posent pas de probleme

    c'est pas ca ? ou alors c'est le meme repertoire/sous repetoire/... en absolue et pas en relatif ??

  10. #10
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    effectivement tu n'as pas compris...

    Le processus de compilation est en 2 parties :

    • la génération d'un fichier appelé "objet" (ou .o ou .obj) traduit le texte que tu as écrit suivant la syntaxe du langage utilisé en instructions machines. C'est la compilation. Ces fichiers ne sont pas exécutables.

    • l'assemblage de un ou plusieurs de ces fichiers avec les bibliothèques de bas niveaux systèmes produit un fichier exécutable (.exe ou .out ou rien du tout comme extension) qui résout les appels de fonctions inter-fichiers ou de biblothèques. Cette étape est l'édition de liens.


    Au stade de la compilation, on peut avoir plusieurs fichiers que l'on veut rassembler pour former un tout cohérent en termes de fonctionalités. Cela s'appelle une biblothèque. Cette biblothèque est donc un ensemble de fonctions traduites en langage machine, mais NON exécutable.

    Deux types de biblothèques peuvent être créées : des biblothèques statiques, et des bibliothèques dynamiques, et ceci AVEC LES MEMES fichiers .o ou .obj.

    Lors de l'édition de lien, le compilateur détecte par exemple l'appel à une fonction f figurant dans la biblothèque toto.

    • Si la bibliothèque est statique, au moment où l'éditeur de liens trouve la référence à cette fonction f, il va RECOPIER les lignes de la biblothèque correspondant à cette fonction dans le fichier exécutable.

      Si il y en a beaucoup, ton exécutable va donc être gros (toutes les fonctions demandées seront recopiées dans le fichier).

    • Si la bibliothèque est dynamique, l'éditeur de liens va recopier dans le fichier exécutable l'ADRESSE PHYSIQUE ABSOLUE SUR LE DISQUE (pas en termes de secteurs, je ne crois pas... Mais en termes de répertoire/sous-répertoires etc..) où se situe le début de la fonction dans le fichier de la biblothèque.

      Ton exécutable va donc être plus petit (il y a juste l'adresse de la fonction et non le code de la fonction).

      Par contre à l'exécution chaque fois que le code tombera sur l'adresse de cette fonction, le gestionnaire de runtime ira "sauter" à cet endroit-là et exécuter le bout de code correspondant. Donc il FAUT que la biblothèque soit située à la même adresse absolue, et de plus il peut y avoir du temps perdu.


    Très souvent on crée simultanément avec les mêmes fichiers de fonctions une biblothèque dynamique et une biblothèque statique, et on laisse le choix en fonction de l'application et des décisions de déploiement ou de maintenance d'utiliser l'une ou l'autre, sachant que dans l'écriture du code qui fera appel à ces routines, cela ne CHANGE RIEN, ni à la compilation.

    Cela ne change que à la CREATION des biblothèques et des exécutables, ainsi qu'au RUNTIME pour les bibliothèques dynamiques.

    J'espère que là tu comprendras plus clairement...

    Sous unixoide, les biblothèques statiques sont de type ".a", les dynamiques ".so".

    Sous Windows je ne connais pas l'extension des statiques, mais les dynamiques sont .dll

    [NOTE] un avantage des librairies dynamiques est que tu peux profiter de debugging ou éventuellement de nouvelles fonctionalités sans avoir à re-générer un exécutable (à condition que le type et les paramètres d'appel de la fonction n'aient pas changés, bien entendu..).
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    245
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2007
    Messages : 245
    Points : 110
    Points
    110
    Par défaut
    ok merci bien

    je vais essaye de creer les deux types de bibliotheques pour comparer et je choisirais en fonction des resultats

    je te remercie pour cette description plus precise qui m'a beaucoup aide

  12. #12
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Citation Envoyé par souviron34
    Si la bibliothèque est dynamique, l'éditeur de liens va recopier dans le fichier exécutable l'ADRESSE PHYSIQUE ABSOLUE SUR LE DISQUE (pas en termes de secteurs, je ne crois pas... Mais en termes de répertoire/sous-répertoires etc..) où se situe le début de la fonction dans le fichier de la biblothèque.
    Hmmm... Non, l'éditeur de lien ne recopie pas l'adresse physique absolue de la fonction (d'autant que tu contredis toi-même cela en parlant de répertoire/sous-répertoire par la suite), heureusement. L'éditeur de lien recopie l'adresse relative de la fonction dans la bibliothèque partagée (c'est à peu près l'idée du moins). A l'exécution le programme demandera à l'OS de charger la bibliothèque partagée en mémoire (si elle n'y est pas déjà : l'un des avantages d'une bibliothèque partagée est que si plusieurs programmes l'utilise simultanément, une seule instance est chargée en mémoire), l'OS cherchera la bibliothèque dans un certain nombre de répertoire (dans le PATH dans le cas de Windows), la chargera, et ensuite le programme pourra utiliser les fonctions de la bibliothèque partagée.

    --
    Jedaï

  13. #13
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Citation Envoyé par svagrim
    Juste une question d'ordre generale sur la conception d'un programme

    j'ai pour le moment fait plusieurs programme qui se ressemble pas mal et je me demandais si au lieu d'appeler a chaque fois un programme different je ferais pas mieux d'appeler tous le temps le meme programme et mais des choix, genre je met une variable d'entree en plus en appelant le programme, cette variable c'est choix

    et je fais if choix eq "tant" , j'execute telles lignes, if choix eq .... telles autres lignes

    je voudrait en fait savoir si ca change quelque chose au niveau des ressources du pc ou pas
    Généralement si ces programmes se ressemblent vraiment, c'est probablement que tu as loupé quelque part une occasion de factoriser du code, de sorte que soit tu puisses remplacer ce programme par un seul prenant des arguments, soit tu puisses mettre l'essentiel des programmes dans quelques fonctions d'une de tes bibliothèques, de sorte que les sources des programmes deviennent très court et ne contiennent plus que les différences entre eux.

    --
    Jedaï

  14. #14
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    245
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2007
    Messages : 245
    Points : 110
    Points
    110
    Par défaut
    si les programmes se ressemblent vraiment et que je n'ai pas factorise, c'est en grande partie pour plus de simpliciter lors du developpement, et parce que certaine fois la factorisation ne me fait pas eviter grand chose par rapport a ce qui change (meme si ca reste dans le meme esprit)

    le fait est que je peux, si je veux vraiment et en y passant du temps, mieux facoriser pour faire moins de programme, mais avec plus d'arguments.

    Je me demande juste si ca avait vraiment un interet, c'est a dire si ca avait vraiment un impacte sur la vitesse du programme, sur le stockage de memoire

    le truc est que je gere pas vraiment l'info et que je sais pas si la difficulte et le temps que je vais y passe vont apporter quelque chose de suffisament interessant par rapport aux experiences que j'ai a realiser

    je vais essaye ce qui m'a ete dit dans le forum
    et on verra bien ce que ca donne

    si apres on me dit que ca ne changera pas grand chose, je pousse pas les recherches plus loin

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

Discussions similaires

  1. programmer plusieurs PIn d'entrées sur labview avec arduino
    Par chakibcubee dans le forum LabVIEW
    Réponses: 0
    Dernier message: 24/02/2015, 17h33
  2. Réponses: 1
    Dernier message: 02/12/2014, 12h39
  3. Réponses: 2
    Dernier message: 10/06/2009, 13h08
  4. Réunir plusieurs sous programme
    Par lexxor dans le forum C
    Réponses: 3
    Dernier message: 26/03/2009, 23h32
  5. Réponses: 2
    Dernier message: 14/01/2004, 16h21

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