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 :

Taille max d'un tableau ?


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Décembre 2005
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 128
    Par défaut Taille max d'un tableau ?
    Dans le cadre du développement d'un programme convertissant une image .jpeg en .gif, je dois créer un tableau (l'histogramme).
    Ce tableau doit contenir 16 millions d'éléments (255*255*255 en fait), or...je n'arrive pas à créer un tableau contenant plus de 4 millions (3 200 000 environ, si je me souviens bien).
    Comment dois-je faire svp ?

  2. #2
    Membre Expert

    Profil pro
    imposteur
    Inscrit en
    Avril 2003
    Messages
    3 308
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : imposteur

    Informations forums :
    Inscription : Avril 2003
    Messages : 3 308
    Par défaut
    N'utilise pas un tableau...

  3. #3
    Expert confirmé
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Par défaut
    quand tu dis que tu n'arrives pas... ça veut dire quoi ?
    tu as un message d'erreur ?
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag :resolu: (en bas)

  4. #4
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    La commande linux "limits" donne la taille de la pile pour tout processus. Chez moi c'est 8Mo. Ton tableau fait 16Mo...
    Essaye de mettre le tableau en global (ou en static dans ta fonction)
    Sinon, il serait preferable de faire de l'allocation dynamique pour une telle taille

  5. #5
    Membre confirmé
    Inscrit en
    Décembre 2005
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 128
    Par défaut
    Désolé j'ai oublié de préciser, quand je dis que je n'arrive pas à créer ce tableau...j'ai en fait une "Erreur de segmentation". Probablement un dépassement de mémoire, comme le précise Gruik.

    Allocation dynamique, tu pourrais préciser s'il te plait ?
    Je fais en général de la programmation objet (Java, C#), et en général je ne gère pas des tableaux aussi grands.
    Le langage C me perturbe un petit peu à vrai dire...

  6. #6
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    Allocation dynamique:
    malloc, calloc, realloc.

  7. #7
    Membre confirmé
    Inscrit en
    Décembre 2005
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 128
    Par défaut
    Ok merci, je suis allé voir la faq, je vais tester :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int* hist=malloc((255*255*255)*sizeof *hist);
    Je verrai ce que ça donne demain, quand je pourrai tester à la fac...

    Merci .

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par shinkyo
    Allocation dynamique, tu pourrais préciser s'il te plait ?
    Je fais en général de la programmation objet (Java, C#), et en général je ne gère pas des tableaux aussi grands.
    Le langage C me perturbe un petit peu à vrai dire...
    Je rêve. Tu ne connais pas le C et tu prétends vouloir bricoler des tableaux monstrueux comme ça ?

    Il faut s'attendre à une nouvelle catastrophe internationale ? Un bombardement intempestif de l'Iran par exemple (Oups, un missile de 50 kT a tête multipes sur Téhéran, désolé, je l'ai pas fait exprès ...)

    Laisse tomber et commence par apprendre le C avant de déclencher la troisième guerre mondiale...


  9. #9
    Membre confirmé
    Inscrit en
    Décembre 2005
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 128
    Par défaut
    J'ai pas demandé à faire ce truc en langage C. Je n'ai même rien prétendu du tout.
    Ca m'a été imposé dans une matière à la fac...je m'en serai bien passé, personnellement.
    Et puis chacun son truc hein, pas besoin de monter sur ses grands chevaux pour si peu.

    Mais, merci quand même du compliment.

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par shinkyo
    Dans le cadre du développement d'un programme convertissant une image .jpeg en .gif, je dois créer un tableau (l'histogramme).
    Ce tableau doit contenir 16 millions d'éléments (255*255*255 en fait), or...je n'arrive pas à créer un tableau contenant plus de 4 millions (3 200 000 environ, si je me souviens bien).
    Comment dois-je faire svp ?
    Sur ton implémentation, la taille maximale théorique d'un objet C en bytes est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    #include <stdio.h>
    int main (void)
    {
       printf ("%lu bytes\n", (unsigned long) ((size_t) -1));
       return 0;
    }
    Evidemment, il n'est pas question de créer un tel objet en mémoire automatique.

    On peut essayer en mémoire statique

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    #include <stdio.h>
    int main (void)
    {
       static int hist[255*255*255];
       printf ("%lu bytes\n", (unsigned long) sizeof hist);
       return 0;
    }
    ou en mémoire allouée.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    #include <stdio.h>
    #include <stdlib.h>
    int main (void)
    {
       size_t size = 255 * 255 * 255;
       int *hist = malloc (sizeof * hist * size);
       if (hist != NULL)
       {
          printf ("%lu bytes allocated\n", (unsigned long) (sizeof *hist * size));
     
          /* ... */
          free (hist), hist = NULL;
       }
       return 0;
    }
    Les objets non linéaires (tableau de pointeurs, listes, arbres) peuvent évidemment être beaucoup plus gros.

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

Discussions similaires

  1. Taille max d'un tableau
    Par selmani300 dans le forum C
    Réponses: 5
    Dernier message: 26/04/2009, 15h16
  2. taille Max de string dans un tableau
    Par maxos75 dans le forum ASP
    Réponses: 3
    Dernier message: 01/08/2008, 20h31
  3. creer un tableau sans lui imposer une taille max
    Par christianf dans le forum C#
    Réponses: 7
    Dernier message: 05/05/2008, 18h50
  4. Réponses: 11
    Dernier message: 18/11/2007, 17h41
  5. taille max tableau et modification
    Par belgaran dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 11/08/2006, 22h09

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