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 :

Tableau stocké dans un fichier


Sujet :

C++

  1. #1
    Membre habitué

    Inscrit en
    Avril 2011
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 55
    Points : 147
    Points
    147
    Par défaut Tableau stocké dans un fichier
    Bonjour,

    j'ai besoin de stocker un tableau trop gros pour être instancié par mon programme, (en fait il faut faire un fftshift sur un tableau qui prend là moitié de la RAM).

    Du coup je pensais utiliser la stxxl, mais sur les tuto que j'ai vus, la lib semblais imposer des contraintes assez lourdes niveau de la compilation. Donc je voulais faire un tableau qui estoquerait ses éléments sur un fichier, l'interface serait en gros :

    1. Constructeur vide
    2. Constructeur avec la tailledu tableau
    3. getter / setter sur les élléments
    4. une methode size / length
    5. éventuellement une méthode pour redimensionner


    Je voudrais savoir si quelqu'un avait des pistes pour coder ce genre de truc.

    Merci d'avance

  2. #2
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    Bonjour,

    Ton tableau est à une seule dimension si j'ai bien compris ?
    Que doit-il stocker, comment sera-t-il utilisé, à quelle fin, quelle taille devrait-il faire ?

    Pour ton fichier, tu peux enregistrer des pointeurs vers les structures à stocker dans ton tableau et utiliser seekg pour lire le n ième élément.
    Pour l'interface, au lieu d'utiliser "get" et "set", surcharge plutôt l'opérateur [].

    Je te conseille aussi d'implémenter des itérateurs ainsi que les méthodes begin() et end().

  3. #3
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Si ce tableau ne fait "que" la moitié de la RAM, le plus efficace et le plus rentable est probablement de doubler la taille de ta RAM, et de ne pas passer par un fichier.

    Sinon, stocker un tableau sur disque n'a rien de difficile, mais là où ça se corse, c'est comment vas-tu y accéder ? Si globalement, tu accèdes aux cases plus ou moins dans l'ordre, et que tu n'as besoin à chaque moment que des cases voisines proches de la case "active", pas de soucis, n’importe quelle lecture bufferisée fera l'affaire. Si maintenant tu dois accéder en permanence à des éléments d'indice totalement aléatoire, tu vas être très inefficace en passant sur disque.
    Si tu te trouves dans un état intermédiaire, il peut être intéressant de clarifier comment les accès ont lieu afin de concevoir le stockage en fonction.


    Après, si tu as des problèmes de perf, tu peux aussi te pencher sur les lectures de données asynchrones. L'idée est que tu commences à demander au disque des données dont tu n'as pas encore besoin, et le temps que le disque te réponde, tu continues ton travail avec les données que tu as déjà, comme ça tu es prêt pour enchaîner quand tu arrives sur ces données là.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  4. #4
    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 peux aussi mapper le fichier en mémoire. Tant que les pages du fichiers ne sont pas accédées, il n'occupe pas de RAM. Et ainsi, tu laisse l'OS allouer et libérer les pages inutiles (ou trop peu récemment utilisées).

    Quel OS utilises tu ?
    est ce que tu fait des accès en écriture sur ce fichier ?
    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
    .

  5. #5
    Membre habitué

    Inscrit en
    Avril 2011
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 55
    Points : 147
    Points
    147
    Par défaut
    Merci pour vos réponses

    Ton tableau est à une seule dimension si j'ai bien compris ?
    Oui, entait c'est un tableau 1D qui permet d'en représenter un N-D.

    Que doit-il stocker
    à priori des doubles ou des complex (structure ou tableau de deux éléments)

    Pour ton fichier, tu peux enregistrer des pointeurs vers les structures à stocker dans ton tableau et utiliser seekg pour lire le n ième élément.
    Hum je suis pas sur de saisir, perso je voulait partir sur des trucs à la fwrite pour lire un élément (lecture et écriture en binaire quoi, et me déplacer avec un truc à la fseek, enfait d'après (le peut de) ce que j'ai compris sur les fichiers en C ça marche un peut comme un tableau (je connais juste pas les fonctions).

    Si globalement, tu accèdes aux cases plus ou moins dans l'ordre
    Je pense pas que ça sera le cas

    Après, si tu as des problèmes de perf
    Non mon but est juste de montrer qu'une méthode fonctionne, que ça prenne 1h où 30sec n'est pas important. Bon si l'accès peut être fait avec un coup constant c'est mieux.

    Perso Linux, mais le type qui reprendra ça seras peut être sous mac, ou Windows, si la lib standard C/C++ permet de faire ça c'est mieux.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    est ce que tu fait des accès en écriture sur ce fichier ?
    Oui Oui, je pensait le créer même avec tmpfile.

  6. #6
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    Citation Envoyé par ahoff Voir le message
    Hum je suis pas sur de saisir, perso je voulait partir sur des trucs à la fwrite pour lire un élément (lecture et écriture en binaire quoi, et me déplacer avec un truc à la fseek, enfait d'après (le peut de) ce que j'ai compris sur les fichiers en C ça marche un peut comme un tableau (je connais juste pas les fonctions).
    seekg est "l'équivalent" de fseek en C++.

Discussions similaires

  1. Réponses: 3
    Dernier message: 12/11/2009, 14h26
  2. Réponses: 12
    Dernier message: 23/03/2009, 19h48
  3. Réponses: 10
    Dernier message: 05/02/2007, 11h21
  4. tableau 2D dans différents fichiers .c
    Par abelolive dans le forum C
    Réponses: 18
    Dernier message: 05/07/2006, 17h44
  5. execution d une requete stockée dans un fichier
    Par ghostdog dans le forum Langage SQL
    Réponses: 2
    Dernier message: 18/10/2005, 16h20

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