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 en mémoire


Sujet :

C++

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 11
    Points : 10
    Points
    10
    Par défaut Taille maximale en mémoire
    Bonjour,

    Alors voila mon problème, je place des points régulièrement dans l'espace (2D pour le moment) et à chaque point j'attribue un certain nombre de champs. La distance entre chaque point est fonction d'un paramètre de l'utilisateur et peut être dans la pratique très petit ce qui a pour conséquence d'augmenter considérablement la taille du tableau.

    Le problème est que pour des scènes soit très grandes, soit avec un pas très fin, la taille devient telle qu' apparemment le système n'arrive plus à allouer de la mémoire (erreur de bad_alloc). J'ai essayé de contourner le problème en faisant plusieurs tableaux de tailles acceptables mais la aussi, il me fait un bad_alloc pour le même nombre d'élements, c'est à dire que si un grand tableau de taille N crache, alors n petits tableaux de taille t vont cracher dès que n * t > N.

    Donc je voulais savoir si il y avait moyen de contourner cette limitation. Il me semble que la limite d'adressage est à 3-4Go mais la le tableau lâche bien avant.

    D'avance merci pour votre attention.

  2. #2
    zul
    zul est déconnecté
    Membre éclairé Avatar de zul
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    498
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 498
    Points : 699
    Points
    699
    Par défaut
    Tout dépend du système d'exploitation que tu utilise, et de quelle type de limitation tu atteint :
    - limite en dure dans le noyau
    - limite physique ( genre quand Mem utilisé > RAM + SWAP)
    - limite liée au compte ...

    Sans plus de précision, il est difficile de te répondre. La réponse est en général non, il faut faire quelquechose de plus fin (ce qui revient en général à recoder un mécanisme de swap sur un fichier, et à faire les calculs par sous-ensembles).

  3. #3
    Modérateur
    Avatar de bruno_pages
    Homme Profil pro
    ingénieur informaticien à la retraite
    Inscrit en
    Juin 2005
    Messages
    3 533
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : ingénieur informaticien à la retraite
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 3 533
    Points : 6 709
    Points
    6 709
    Par défaut
    Sous quel OS (Windows, Linux, MacOS X ...) êtes-vous ?

    La manipulation d'images est rapidement consommatrice de mémoire, vous devez autant que faire ce peux réduite la taille des informations associée à chaque point. Autre possibilité non exclusive avec la première, ne pas tout charger en mémoire, c.a.d. avoir un mécanisme de cache géré manuellement.

    [argh]collision avec la réponse de zul[/edit]
    Bruno Pagès, auteur de Bouml (freeware), mes tutoriels sur DVP (vieux, non à jour )

    N'oubliez pas de consulter les FAQ UML et les cours et tutoriels UML

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 11
    Points : 10
    Points
    10
    Par défaut
    Alors "malheureusement" je dois coder ça sous Windows Seven 64bits.
    Je dispose de 8Go de RAM et en étant vraiment très large, le programme crache à 1Go d'utilisation pour une utilisation totale de la RAM de 3Go environ.

    Ce qui m'intrigue, c'est que j'avais déjà fait des programmes très gourmands en mémoire sur Linux en c++ et j'avais pu aller jusqu' à consommer 3Go de RAM + swap. Donc j'ai peur d'entendre que Windows limite l'utilisation de la RAM

  5. #5
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 860
    Points : 219 064
    Points
    219 064
    Billets dans le blog
    120
    Par défaut
    Bonjour,

    Êtes vous archi sur que vous compilé en 64bits?
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 11
    Points : 10
    Points
    10
    Par défaut
    Pour la compilation, j'utilise Qt Creator que j'utilise pour pouvoir visualiser le résultat du maillage. Ne me souvenant plus quelle version j'avais pris ai téléchargement, un rapide coup d'oeil sur la page de dl de Qt montre qu'ils ne font pas la distinction 32/64 bits pour Windows.

    Donc dans le doute, j'ai séparé le code Qt du reste et recompiler le projet sur Visual Studio 2008 dont je suis archi sur qu'il est en 64 bits et la même problème, bad_alloc sur les mêmes jeux de données.

  7. #7
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 860
    Points : 219 064
    Points
    219 064
    Billets dans le blog
    120
    Par défaut
    Une fuite de mémoire ?

    Ou alors vous faites beaucoup plus d'allocation que ce que vous devriez faire ...
    ( l'usage de copie de structure lors du passage par arguments à la place de l'utilisation des pointeurs/references peut aussi être fatale )
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  8. #8
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Salut, et bienvenue sur le forum
    Citation Envoyé par Shayä Voir le message
    Pour la compilation, j'utilise Qt Creator que j'utilise pour pouvoir visualiser le résultat du maillage. Ne me souvenant plus quelle version j'avais pris ai téléchargement, un rapide coup d'oeil sur la page de dl de Qt montre qu'ils ne font pas la distinction 32/64 bits pour Windows.

    Donc dans le doute, j'ai séparé le code Qt du reste et recompiler le projet sur Visual Studio 2008 dont je suis archi sur qu'il est en 64 bits et la même problème, bad_alloc sur les mêmes jeux de données.
    Il faut faire attention à un point assez problématique:

    Si un système d'exploitation peut permettre l'utilisation d'une application 32 bits, et encore, sous certaines conditions, une application 32 bits ne pourra, en tout état de cause, utiliser que des bibliothèques... 32 bits (et, sauf erreur, une application 64 bits ne pourra pas utiliser de bibliothèques 32 bits ).

    La raison principale tient dans le nombre de bits permettant de représenter les pointeurs (32 ou 64 bits ), dont découle directement les plages mémoires accessibles par ceux-ci, et donc... la quantité de mémoire que nous pourrons envisager d'utiliser (sous réserve de restriction imposée par l'OS).

    Classiquement, sous windows, une application 32 bits est limitée à quelque chose comme... 2 Gb, et, vu que tu utilise Qt, je ne pourrais donc que t'inciter à envisager d'obtenir une version 64 bits de cette bibliothèque (nous fournissons une série de binaires compilés pour différents systèmes / architectures / compilateurs. Tu en saura plus sur cette discussion)

    Commence donc, peut être, par essayer d'obtenir la version la plus adéquate possible de Qt, et réessaye
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  9. #9
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 764
    Points : 2 705
    Points
    2 705
    Par défaut
    Quel est le domaine applicatif ?

    D'où tes points tirent-ils leurs valeurs ?

Discussions similaires

  1. Réponses: 10
    Dernier message: 27/05/2009, 12h31
  2. Taille maximale d'un package
    Par haugoyard dans le forum Oracle
    Réponses: 2
    Dernier message: 09/08/2005, 16h27
  3. taille maximale d'une base de donnée paradox
    Par Anonymous dans le forum Paradox
    Réponses: 5
    Dernier message: 14/02/2004, 17h39
  4. Réponses: 9
    Dernier message: 29/07/2003, 14h41

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