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 :

Allocation de (beaucoup) de memoire


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Avatar de buzzkaido
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2004
    Messages
    821
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Ille et Vilaine (Bretagne)

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

    Informations forums :
    Inscription : Juillet 2004
    Messages : 821
    Par défaut Allocation de (beaucoup) de memoire
    Bonjour,

    Dans une application que je développe, l'utilisateur peut charger des données en mémoire.

    Mais il peut arriver qu'il cherche à charger BEAUCOUP de données (plus d'un giga).

    Lors du chargement des données, il est proposé à l'utilisateur d'entrer un coefficient de "sous-echantillonnage" qui permet de ne charger que 1/10ème, 1/5ème... des données. (au prix d'une perte de précision, bien sûr)

    Tout marche bien, mais...

    Si l'utilisateur essaie de charger (par exemple) 1 giga de données et entre un coefficient égal à 1, lors du chargement, je fait un :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    truc = new machin[1 giga]
    Ce qui aboutit, en général (selon la machine) à un plantage...

    Donc j'aimerais savoir comment determiner la taille maximale que je vais pouvoir allouer (pour indiquer à l'utilisateur que son coef est trop petit, ou qu'il faut qu'il rachete de la RAM...)

    PS : à la fois pour Linux et Windows, avec QT

    Merci !

  2. #2
    Inactif  

    Homme Profil pro
    Ingénieur test de performance
    Inscrit en
    Décembre 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur test de performance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 986
    Par défaut
    Bonjour.

    Plutôt que de mettre les données en mémoire, pourquoi ne pas utiliser un fichier. Un Go, ça commence à faire beaucoup, la plupart des OS limitent la taille maximum pour un programme à environ 3 Go, il en faudra donc peu pour que ton programme se bloque une fois atteint cette limite.

    Pour savoir quelle taille mémoire ton programme peux allouer dépendra donc de la taille de la mémoire programme, des ressources systèmes au moment de l'allocation.

    Il faut une raison vraiment valable pour maintenir 1 Go de données en mémoire...

    PS : une connaissance approfondie de la façon dont windows et linux gèrent la mémoire me semble judicieux, afin de prendre la meilleure décision possible.

  3. #3
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 738
    Par défaut mémoire "virtuelle" = 32/64 bits + RAM + swap.
    Bonjour
    Si tu travailles dans un environnement 32 bits tu devrais pouvoir utiliser ces 1G puisqu'à priori il ne s'agit que de mémoire virtuelle.

    Comment va être balayé cet espace au sens localité des références dans l'espace et dans le temps va donner la taille de RAM qu'il faudra avoir pour que les temps de réponses ne soient pas trop dégueulasses.

    Le dernier et non le moindre des soucis sera de ne pas vautrer de système en sur-utilisant les fichiers de swap. Il sera peut être judicieux d'associer cette espace mémoire à un fichier mappé en mémoire (voir mmap): cela évitera de taper dans les fichiers de 'swap' partagés.

    Si la mémoire virtuelle restante est insuffisante... il faut passer en 64 bits ou faire des entrées sorties 'à la main' dans un fichier.
    -W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  4. #4
    Membre éclairé
    Avatar de buzzkaido
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2004
    Messages
    821
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Ille et Vilaine (Bretagne)

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

    Informations forums :
    Inscription : Juillet 2004
    Messages : 821
    Par défaut
    Merci pour les réponses.

    Je compile l'application pour Windows 64 bits et Linux 64 bits, et c'est prévu pour tourner sur une machine avec 16 Go de ram (!!!)

    D'une manière générale, le but est effectivement de ne PAS charger 1Go de données, mais un "sous-echantillonnage" de ces données pour travailler dessus en RAM.

    Mon seul soucis est de pouvoir prévenir l'utilisateur que "l'opération demandée utilisera trop de mémoire, veuillez charger moins de données"

    Ou en tout cas, d'éviter le plantage si l'allocation échoue.

  5. #5
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 738
    Par défaut
    Citation Envoyé par buzzkaido Voir le message
    D'une manière générale, le but est effectivement de ne PAS charger 1Go de données, mais un "sous-echantillonnage" de ces données pour travailler dessus en RAM.
    Lorsque tu fais new de 1Go tu ne crées que de l'espace 'virtuel'.
    Ce n'est que lorsque tu liras/ecriras dedans que le mécanisme de pagination va aller chercher de la mémoire physique.
    Si tu ne touche que 10% du tableau possible que tu n'ais besoin que de 100Ko de mémoire physique... Tout dépendra de la localité des accès dans l'espace et le temps

    Citation Envoyé par buzzkaido Voir le message
    Mon seul soucis est de pouvoir prévenir l'utilisateur que "l'opération demandée utilisera trop de mémoire, veuillez charger moins de données"
    Ou en tout cas, d'éviter le plantage si l'allocation échoue.
    Vu la RAM disponible? tu risques de bouffer du swap, d'ou ma suggestion côté mmap.
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 064
    Par défaut
    Je n'ai jamais eu à faire ça, mais un new n'est pas sensé lancer une exception ou renvoyer null dans ce genre de cas? Je veux dire, je pensais qu'après un new réussi on avait l'assurance d'avoir un accès illimité et sans risque à la mémoire demandée.

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

Discussions similaires

  1. csrss.exe utilise beaucoup de memoire : virus ?
    Par naokylon dans le forum Sécurité
    Réponses: 6
    Dernier message: 03/01/2013, 11h58
  2. Réponses: 2
    Dernier message: 15/07/2008, 16h46
  3. Allocation dynamique de la memoire ?
    Par gotrunkssj dans le forum Bibliothèque standard
    Réponses: 6
    Dernier message: 22/01/2008, 21h04
  4. programme qui consomme beaucoup de memoire
    Par gaut dans le forum Windows
    Réponses: 10
    Dernier message: 01/02/2005, 20h33
  5. allocation et desallocation de memoire
    Par barthelv dans le forum C
    Réponses: 7
    Dernier message: 22/06/2004, 13h23

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