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 maximale d'un tableau de char


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 54
    Par défaut Taille maximale d'un tableau de char
    Bonjour.

    J'ai un problème avec la taille maximale d'un tableau de char.
    Je programme en C avec le compilateur Bloodshed Dev-C++

    Contexte:
    Je travaille sur un programme de traitement de données.
    Je dois lire un fichier entier et le stocker dans un tableau pour le traiter.

    J'ai
    maximum 300.000 paragraphes,
    maximum 200 lignes par paragraphe
    maximum 1.000 caractères par ligne
    Ce sont des tailles maximales idéales, m'assurant de lire 100% des données.
    Edit : en pratique, le fichier ne fait que 800Mo.

    J'ai donc imaginé de le stocker dans un tableau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    char [numéro de paragraphe] [numéro de ligne] [nombre de caractère de la ligne]
    char [300000][200][1000]
    A la compilation -> size of array is too large :-(


    Il me serait difficile de re-écrire tout le programme pour travailler " à la vollée" et donc éviter de charger le fichier entier.

    Donc je cherche une solution alternative. Comme en moyenne, les paragraphes sont beaucoup plus petits que 200 lignes et 1000 caractères par lignes, j'ai pensé à utiliser une allocation dynamique, mais je ne sais pas comment m'y prendre.

    Merci de votre aide.

  2. #2
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 315
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 315
    Billets dans le blog
    5
    Par défaut
    Honnêtement le traitement à la volée ne doit pas être la mer à boire. La modification de ton code ne doit pas être si importante que ca.

    Quel type de traitement effectues-tu sur ces données pour qu'on comprenne un peu mieux tes soucis?

  3. #3
    Expert confirmé

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par ickis69 Voir le message
    J'ai un problème avec la taille maximale d'un tableau de char.
    Je programme en C avec le compilateur Bloodshed Dev-C++
    ...
    J'ai donc imaginé de le stocker dans un tableau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    char [numéro de paragraphe] [numéro de ligne] [nombre de caractère de la ligne]
    char [300000][200][1000]
    A la compilation -> size of array is too large :-(
    300 000 * 200 = 60 000 000

    * 1000 = 60 000 000 000 = environ 70 Giga octets..

    En C ou pas en C tu auras un problème sur la majoirité des machines

  4. #4
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Par défaut
    Citation Envoyé par souviron34 Voir le message
    environ 70 Giga octets..

    En C ou pas en C tu auras un problème sur la majoirité des machines
    Oui, et j'ajouterai surtout que tu auras des problemes en allocation statique comme en allocation dynamique.

    Tu as un probleme de "passage a l'echelle", c'est a dire que l'algorithme que tu as concu s'applique bien sur un petit volume de donnees, mais pas sur un gros volume.
    Il est necessaire de repenser ton algorithme si tu veux pouvoir traiter tes donnees, par exemple en faisant un traitement par lots, en travaillant sur une base de donnees, ...
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  5. #5
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Tu dois malgré tout avoir une idée sur le nombre total de caractères que tu dois lire, en regardant la taille du plus gros fichier à traiter.
    Si il fait 60Go, il faut revoir ta copie.
    Si il a une taille de disons 1Go, tu peux effectivement envisager de passer par de l'allocation dynamique ajustée au contenu du fichier pour stocker l'intégralité du fichier. Dans ce cas, le code de chargement et d'exploitation des données sera à revoir, car la structure de données utilisée ne sera pas un tableau à 3 dimensions.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 54
    Par défaut
    Bonjour et merci de vos réponses.

    Effectivement, re-structurer mes algorithmes pour travailler par lot à la volée c'est la solution noble.

    Mais je me demandais si il n'y avait pas une autre solution, plus simple et rapide. Comme je viens de le spécifier dans le post d'origine, le fichier ne fait en pratique "que 800 Mo".

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 54
    Par défaut
    Bonsoir.

    Quelques heures de travail plus tard, j'ai refondu l’algorithme, tout marche super

    Mais par curiosité, comment on aurait pu faire autrement (char *, malloc, etc ?!)

    Merci.

  8. #8
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Par défaut
    Citation Envoyé par ickis69 Voir le message
    Mais par curiosité, comment on aurait pu faire autrement (char *, malloc, etc ?!)
    Tu veux dire pour utiliser 60 Go de memoire ? Ca semble difficilement possible avec des machines et des librairies standard.
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  9. #9
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Par défaut
    Citation Envoyé par souviron34 Voir le message
    60 000 000 000 = environ 70 Giga octets..
    Je dirais plutôt exactement 60 Giga octets (= 55.8 "Gibioctets").

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

Discussions similaires

  1. LV 2011 : taille maximale d'un tableau 1D
    Par sooyung dans le forum LabVIEW
    Réponses: 1
    Dernier message: 09/06/2015, 21h50
  2. [XHTML 1.0] Taille maximale d'un tableau
    Par ne2sbeal dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 05/03/2010, 11h23
  3. [Tableaux] Taille maximale d'un tableau
    Par estacado dans le forum Langage
    Réponses: 7
    Dernier message: 25/07/2007, 21h20
  4. [Tableaux] Taille maximale d'un tableau
    Par Bisûnûrs dans le forum Langage
    Réponses: 3
    Dernier message: 15/02/2007, 18h53
  5. [langage] taille maximale d'un tableau ?
    Par Jasmine80 dans le forum Langage
    Réponses: 10
    Dernier message: 10/11/2006, 09h41

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