|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Membre du Club
![]() Doctorant en Astrophysique Inscription : mars 2009 Messages : 283 ![]() |
Bonjour.
Je souhaiterais que mon code teste la mémoire disponible pour son exécution a son démarrage, et cela en C++11 standard (pas de call system). J'ai besoin d'un chiffre approximatif (à 100Mo près environ), pas de la valeur exacte. Que pensez vous du code suivant : (on ajoute des éléments d'1Mo à une liste jusqu'à saturation, et l'on fait une deuxième passe avec une autre liste au cas où la limitation soit liée à l'implémentation de la liste) Code :
Merci beaucoup.
|
||
|
|
00
|
|
|
#2 |
![]() ![]() |
Salut,
Je crains hélas que ce ne soit dangereux, du moins, sous windows et en 32 bits. Il y a eu assez récemment une discussion dans laquelle le PO s'étonnait de l'impossibilité d'allouer de la mémoire après avoir atteint un point de saturation et supprimé pas mal d'éléments, mais je ne retombe décidément plus dessus ![]() Pour ce que j'ai retenu de la discussion en question, il y a un problème "architectural" au niveau de la gestion de mémoire sur windows, avec un comportement différent en fonction de la quantité de mémoire allouée à la fois (un comportement différent entre la libération d'un block de plus de 5 Mb et celle d'un block de moins de 5Mb, si mes souvenirs sont bons). Enfin, le problème est qu'une partie seulement de la mémoire est correctement libérée (et dans le cas du PO, il s'agissait de la plus petite partie qui était libérée), l'autre ne l'étant pas ![]() Tu cours donc le risque qu'une partie seulement de la mémoire ne soit libérée après ce test, ce qui reviendrait à n'avoir que... ce peu de mémoire disponible. Et comme je présume que ton but est quand meme de continuer à travailler après avoir évalué la quantité de mémoire disponible, je présume aussi qu'il est pour toi hors de question de mettre fin à l'application afin de récupérer la mémoire perdue EDIT: ben voilà, j'ai retrouvé la discussion en question... Intéresse toi surtout à l'intervention #14 de Arzar
__________________
en bas de page
|
|
|
00
|
|
|
#3 |
|
Membre Expert
![]() Pierre Ingénieur développement logiciels Inscription : juin 2007 Messages : 1 182 ![]() |
Bonjour,
Je pense que le problème, c'est de vouloir connaitre une caractéristique du système (la mémoire disponible), en se limitant aux seuls possibilitées d'un langage conçu "hors système". C'est improbable de pouvoir y parvenir en toute situation. Il faut passer par les API systèmes. Mais rare sont les cas où tu dois t'adapter à 75 API différentes.
__________________
Mes principes de bases du codeur qui veut pouvoir dormir:
|
|
00
|
|
|
#4 | |||
|
Expert Confirmé Sénior
![]() ![]() Emmanuel DelogetDéveloppeur informatique Inscription : septembre 2007 Messages : 1 826 ![]() |
Citation:
De plus, ce type de code à un autre problème : si tu arrives à réserver toute la mémoire physique, tu va rendre ton système instable - il suffit qu'un autre processus important ait besoin de mémoire et bam, c'est ton OS qui doit redémarrer. C++ ne permet pas d'obtenir ce genre d'informations, pour une très simple raison : C++ n'a pas vocation à dire aux OS quels services ils doivent offrir. C'est pour ça que ce sont des fonctions dépendantes de OS qui fournissent ce genre de renseignements.
__________________
[FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...] Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi. Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça. Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas. Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas. |
|||
|
00
|
Copyright © 2000-2013 - www.developpez.com