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

SL & STL C++ Discussion :

determiner la dimention en kb d'un vector<string>


Sujet :

SL & STL C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Avril 2002
    Messages
    180
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 180
    Par défaut determiner la dimention en kb d'un vector<string>
    Salut
    Comment efficasement determiner la taille en bit's d'un buffer de type
    vector<string>

  2. #2
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 296
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 296
    Par défaut
    Quel est ton problème ? (->que veux-tu exactement faire ?)

    (L'espace mémoire occupé par chaines, vecteurs et autres trucs standards varie d'une implémentation à l'autre, et qui plus est sont répartis entre tas (le buffer) et pile ou tas (les élements de la classe dont la taille est obtenue avec un sizeof)
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  3. #3
    Membre confirmé
    Inscrit en
    Avril 2002
    Messages
    180
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 180
    Par défaut
    un de nos nouvelle equipement genere de trop gros fichier pour la compatibiliter avec certain de nos sotware on ma demmender de tronquer ces fichier je me suis arranger avec l'inverce ingenerei pour l'entete des fichier maintenent je doit tronquer le contenue. Bien que je n'ait pas de besion d'une precission au bit pres j'en profite pour esseiller d'apronfondire mes connaissance dans ce dommaine

    le principe est simple

    je lit le fichier ligne par ligne puis place le contenue dans un buffer <<vector>>
    si je dececte que je peut tronquer le fichier a la dernierre ligne lue
    je compare la taille du buffer a une taille minimal;
    si le buffer est plus grand que la taille minimal;
    je cree un nouveau fichier et le peuple avec le contenue du buffer
    je vide le buffer
    je continue la lecture


    ainsi
    sizeof(vector)=le total des membre de vector //ici ca pas rapport

    j'aurais crue que l'addition des
    buffer+=vector[i].size()*sizeof(char)
    pour un buffer de 3320960 bit's le fichier = 3,669 kb

    ces pas encore ca, a moin que un fichier prene plus de place sur un disque que en memoire mais j'ai rien trouver pour le confirmer

    merci

  4. #4
    Expert confirmé

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par défaut
    C'est pas très clair.
    Juste quelques remarques:
    sizeof(vector), c'était une façon de parler j'espère, car l'opérateur sizeof ne te renvoie pas la taille d'un tableau.
    attention à ne pas utiliser la taille réelle sur disque mais la taille du fichier lui même. Si le fichier est compressé sa taille réelle sera plus petite, sinon elle sera plus grande car le système de fichier n'alloue pas de l'espace à l'octet près mais par petits morceaux entiers.

  5. #5
    Membre confirmé
    Inscrit en
    Avril 2002
    Messages
    180
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 180
    Par défaut
    desoler pour sizeof<vector> j'ai pas pensser avant d'ecrire je ne voulait pas etre mesquin

    en effait tu ma faits realiser que ta table d'allocation des fichier alloue(ces pas vraiment la table d'allocation qui aloue masi bon) l'espace disque pour les fichier par block (4 cluster il me semble) a moin que le disque n'ait ete doubler (sous windows);

    ne en moin mes interogation demmeure

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    vector<string>m_vector;
    ...
    int buffersize=0;
    for(int i=0;i<m_vector.size() i++)
    {
              buffersize+=m_vector[i].size()*sizeof(char);
    }
    ici est-ce que buffersize sera = a l'espace memoire utiliser
    probablement pas ????
    il devrait etre plus petit car il ne repersente que l'espace occupe par les caractere a l'interieur des string qui sont a l'interieur de mon tableau

    donc quelle est l'espace accuper par mon vector ????

    si j'ecrit un fichier avec ce buffer pourquoi est-ce que j'ai une difference de pres de 7% ?????

    buffersize =3320960
    filesize =3756876 bits

    ces pas tres important et ces meme pas un probleme et ce ne m'empeche pas de rien comprendre

    merci a tous;

    je devrait peut etre ecrire un livre sur:: comment ne pas poser la question sur ce que l'on pas de besoin savoir !!!

  6. #6
    Expert confirmé

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par défaut
    A priori ton code de calcul de la taille occupée par les caractères des string est bon (sauf que l'occupation en RAM est supérieure : voir différence size() / capacity() dans la FAQ, + sur-coût de l'allocation dynamique + espace sur la pile etc...)
    Ce qui peut expliquer cette différence c'est si t'es sous Windows et que c'est un fichier texte, a chaque saut de ligne la séquence \r\n est transformée en \n (donc en gros tous les carcatères \r sautent). Reste à compter dans un éditeur hexa combien tu as de \r pour savoir si c'est bien la différence constatée...

  7. #7
    Membre confirmé
    Inscrit en
    Avril 2002
    Messages
    180
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 180
    Par défaut
    Ha oui je croie que tu mas donnee une bonne piste

    etant donner que std::string ne retourne pas le caractere de fin de ligne
    ca pourait expliquer pourquoi la taille de fichier est plus grande que mon buffer
    ainsi (vertor[i].size+1)*sizeof(char) serait plus pret de la realiter

    je ne veut pas me faire d'idee mais je croi que ca commence a rentere

    Merci

  8. #8
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 296
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 296
    Par défaut
    L'ouverture en mode non binaire permet de traiter de façon transparente les divers sauts de lignes (\r\n, \n, \r). D'un système à l'autre cela peut changer. Sans compter les fichiers qui mélangent allègrement deux styles -- limite fréquent quand on commence à mélanger divers éditeurs de texte et/ou samba mal configurés j'ai l'impression.

    Ce compte est-il vraiment important ?
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

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

Discussions similaires

  1. vector<map<string, string> >::iterator ?
    Par scheme dans le forum C++
    Réponses: 11
    Dernier message: 10/12/2010, 09h32
  2. Réponses: 2
    Dernier message: 18/09/2010, 22h33
  3. Problème std::vector <std::string >
    Par TNT89 dans le forum SL & STL
    Réponses: 9
    Dernier message: 31/05/2008, 17h51
  4. conversion vector to string
    Par identifiant_bidon dans le forum C++
    Réponses: 18
    Dernier message: 15/11/2007, 10h40
  5. [jsp] Comment faire un cast de Vector to String?
    Par adil_vpb dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 05/03/2007, 11h29

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