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

Qt Discussion :

[QString] Quelle est la taille maximum d'un QString?


Sujet :

Qt

Vue hybride

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 43
    Par défaut [QString] Quelle est la taille maximum d'un QString?
    Bonjour,

    Je travail actuellement avec un QString et Qt en version 4.7 sous Window7.
    Mon programme afficher un gros document HTML pour cela j'utilise un QString qui va contenir le code html à partir d'une base de données.

    Je constate empiriquement que la taille maximum est d’environ 2^27, pour cela j'utilise le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    QString test = "";
     
    for (unsigned int i =0; i< 135217728 ; ++i)
    {
    	test +="0";
    }
    Lors de l’exécution j'ai ce genre de message d'erreur:
    Exception non gérée à 0x670d610e dans test.exe : 0xC0000005: Violation d'accès lors de l'écriture à l'emplacement 0x00000004.
    et i = 134 217 718.

    1) Est ce que j’atteins la limite d'un QString?
    2) Pourquoi la taille max serait vaut 2^27 (chaque caractère est codé sur 5 octets?) ?

    Merci d'avance pour vos réponses.

  2. #2
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Par défaut
    2^27 octets = 128 Mo... tu as réellement des pages html qui font 128 Mo de texte ???

    Sinon, c'est plus une limitation de la taille allouable par le système qu'une réelle limitation de la taille de ta QString

    Chez moi par exemple, ton code plante pas (ubuntu 64b)

    EDIT : chez moi, ça plante à 1073741824, soit 1 Go

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 43
    Par défaut
    Merci pour ta réponse.

    J'affiche l’équivalent de 9000 gros textes sur la page (c'est pas pour le web :p).

    - Est il possible de modifier cette limite avec une option de compilation?

    Mon système possède 6 go ram il pourrait supporté plus 128Mo d'allocation...

    Je pense que les caractères sont codés sur au moins deux octets puisqu'il les sort en utf8 sur demande.

    Tu possèdes combien de RAM sur ton pc sur Ubuntu 64bit?

  4. #4
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Par défaut
    2 Go

    Pas d'option de compilation. Je pense plutôt à un problème de gestion mémoire par le système

    Mais quelque soit la source du texte, c'est quand même abérant une page de 128 Mo. Tu ne peux pas afficher 128 Mo de texte dans une page visible en même temps (donc aucun intérêt) et le temps de chargement/affichage sera inutilement long.
    Une approche intelligente serait de charger et afficher la page par paquet. Ce qui rend inutile les QString de 128 Mo.

  5. #5
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2008
    Messages
    26 772
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2008
    Messages : 26 772
    Par défaut
    Il semblerait que cette limite soit de 2^30 caractères (en UTF-16, représentation interne utilisée par QString) : http://qt-project.org/forums/viewthread/10555. Il me semble que le dernier message contienne une sagesse :

    To summarize: if you find yourself wondering about reaching this limit, you had better start wondering about your design at a more fundamental level.
    Vous souhaitez participer aux rubriques Qt (tutoriels, FAQ, traductions) ou HPC ? Contactez-moi par MP.

    Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

  6. #6
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Par défaut
    Ah oui, 1073741824 ça fait bien 2^30
    Bref, tout comme j'ai dit : c'est pas une bonne idée d'avoir une QString avec une taille pareil

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 43
    Par défaut
    Le problème c'est qu'actuellement c'est des QString qui sont utilisés avec des QRegEx. Donc je voudrais savoir pourquoi ce n'est pas 2^30 comme toi mais 2^27 chez moi? De plus je fais le même test en remplaçant QString par QByteArray et j’atteins un peu moins de 2^28 pour valeur de i avant le crash.

    Mon système est un Window7 64 bits et j'ai 6go de RAM. Lorsque je regarde la consommation du programme avec processXP, j’atteins a peine 555 Mo ( et il me reste 3go de libre).

    Mon problème c'est connaitre la limite quelque soit la cible.

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

Discussions similaires

  1. Quelle est la taille de la mémoire allouée à la JVM ?
    Par emie31 dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 12/11/2006, 21h42
  2. Réponses: 5
    Dernier message: 08/11/2006, 11h41
  3. quelle est la taille maximale en nbre de caract d'un chp text
    Par harlock59 dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 08/07/2006, 18h43
  4. [SGBD] [PHP/MySQL Query]Quelle est la taille du tableau retourné?
    Par Jean_Benoit dans le forum SQL Procédural
    Réponses: 8
    Dernier message: 07/10/2005, 19h10

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