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:
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 !
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