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 :

Choix entre tableau dynamique ou statique ?


Sujet :

C

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 117
    Points : 62
    Points
    62
    Par défaut Choix entre tableau dynamique ou statique ?
    Bonjour,

    Je dois créer un jeu de sudoku. Mes valeurs sont enregistrées dans un tableau de 9 cases sur 9.
    Une question me tarode : vaut-il mieux utiliser de l'allocation dynamique ou statique pour créer ce tableau (tab[9][9]). Je voudrais savoir laquelle de ces solutions est la plus optimisée. Je sais que pour un tel tableau on a pas vraiment besoin d'optimisation particulière, mais je voudrais savoir si il est préférable, dans le cas général, d'utiliser de l'allocation dynamique ou statique pour un tableau qui a une taille connue et fixe.
    Et je voudrais également savoir, si une des deux solutions est préférable, pourquoi ça l'est ?

    Merci d'avance.

  2. #2
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Tu connais la taille de ton tableau, cette taille n'est pas modifiée au cours du programme, cette taille est très modeste ==> tableau statique.

    Tableau dynamique ==> quand tu ne connais pas la taille de ton tableau à la compilation, lorsque la taille est très grande ou lorsque cette taille est modifiée en cours de route.
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 117
    Points : 62
    Points
    62
    Par défaut
    Si nous avons le même type de tableau (taille definis et invariable) mais avec un trés grand nombre d'élement, est-ce que l'allocation statique est encore plus conseillé que l'allocation dynamique ?

  4. #4
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Points : 2 505
    Points
    2 505
    Par défaut
    Pour les tableaux de grande taille, il vaut mieux utiliser une allocation dynamique. Sinon tu risque d'exploser ta pile, et c'est toujours embêtant parce qu'on ne peut pas détecter le problème (comme un malloc() qui renvoit NULL)... Ca fait juste crasher le programme.

  5. #5
    Membre émérite Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Points : 2 280
    Points
    2 280
    Par défaut
    Citation Envoyé par matafan Voir le message
    Pour les tableaux de grande taille, il vaut mieux utiliser une allocation dynamique. Sinon tu risque d'exploser ta pile, et c'est toujours embêtant parce qu'on ne peut pas détecter le problème (comme un malloc() qui renvoit NULL)... Ca fait juste crasher le programme.
    Les variables statiques ne sont pas loger dans la pile.
    "The quieter you become, the more you are able to hear"
    "Plus vous êtes silencieux, plus vous êtes capable d'entendre"

  6. #6
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Points : 2 505
    Points
    2 505
    Par défaut
    Effectivement. D'un autre côté on ne peut pas vraiment parler d'allocation pour les variables statiques, donc j'ai mes doutes sur ce que veut dire hebus44 quand il dit "allocation statique". Mais tu as raison.

  7. #7
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Citation Envoyé par hebus44 Voir le message
    Si nous avons le même type de tableau (taille definis et invariable) mais avec un trés grand nombre d'élement ...
    C'est combien pour toi un très grand nombre
    100, 1000, 10000, 1 million, 1milliard

    A la louche comme cela, je dirai que jusqu'à 100000, pas besoin d'allocation dynamique, tu mets tout dans une variable statique.

    Au delà, il faut voir et se poser la question si on a réellement besoin d'allouer autant de mémoire simultanément
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  8. #8
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par hebus44 Voir le message
    je voudrais savoir si il est préférable, dans le cas général, d'utiliser de l'allocation dynamique ou statique pour un tableau qui a une taille connue et fixe.
    Et je voudrais également savoir, si une des deux solutions est préférable, pourquoi ça l'est ?
    Le principe général est :

    Taille connue à la compilation : tableau statique
    Taille connue à l'exécution : tableau dynamique

    Mais le 1er cas peu présenter des problèmes liés à la taille du tableau. Un tableau statique alloué en mémoire automatique peut provoquer un comportement indéterminé si il est "trop gros". Le problème est qu'on ne sait pas définir de façon fiable et surtout portable, ce qu'est un "tableau trop gros".

    Par expérience, on est à peu près sûr de ne pas avoir de problèmes avec un tableau de moins de 10kbyte en hébergé (ordinateur avec un système), sauf récursion trop profonde...

    Sur un système embarqué, la limite peut être beaucoup plus faible.

    Dès qu'il y a un doute, la solution dynamique permet en général de régler le problème.
    Pas de Wi-Fi à la maison : CPL

  9. #9
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par nicolas.sitbon Voir le message
    Les variables statiques ne sont pas logées dans la pile.
    Il y a une question de vocabulaire à éclaircir.

    Un tableau statique est un tableau de taille fixe.

    T a[N]

    Un tableau statique peut être défini en mémoire automatique
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ...
    {
       T a[N];
       ...
    ou en mémoire statique.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ...
    {
       static T a[N];
       ...
    Pas de Wi-Fi à la maison : CPL

  10. #10
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par ram-0000 Voir le message
    A la louche comme cela, je dirai que jusqu'à 100000, pas besoin d'allocation dynamique, tu mets tout dans une variable statique.
    Attention à ne pas confondre variable statique (mémoire définie en mémoire statique), et tableau statique (tableau de taille fixe).
    Pas de Wi-Fi à la maison : CPL

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 117
    Points : 62
    Points
    62
    Par défaut
    Merci pour vos réponses.
    Je parlais d'un tableau statique et non défini dans la mémoire statique.

Discussions similaires

  1. Réponses: 8
    Dernier message: 12/07/2010, 15h43
  2. choix entre tableau dynamique et liste chainée
    Par siempre dans le forum Débuter
    Réponses: 3
    Dernier message: 16/02/2010, 12h27
  3. tableau dynamique de tableaux statiques.
    Par RaphAstronome dans le forum C++
    Réponses: 2
    Dernier message: 18/02/2007, 14h43
  4. [MySQL] Différence : tableau statique (hardcodé) et tableau dynamique (mysql) ?
    Par vandeyy dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 30/01/2007, 16h09
  5. Réponses: 18
    Dernier message: 06/07/2005, 14h58

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