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)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| #include <iostream>
#include <array>
#include <list>
#include <initializer_list>
#include <stdexcept>
int main(int argc, char* argv[])
{
static const long long int megabyte = 1024*1024;
std::array<char, megabyte> content({{'a'}});
std::list<decltype(content)> list1;
std::list<decltype(content)> list2;
const long long int n1 = list1.max_size();
const long long int n2 = list2.max_size();
long long int i1 = 0;
long long int i2 = 0;
long long int result = 0;
for (i1 = 0; i1 < n1; ++i1) {
try {
list1.push_back(content);
}
catch (const std::exception&) {
break;
}
}
for (i2 = 0; i2 < n2; ++i2) {
try {
list2.push_back(content);
}
catch (const std::exception&) {
break;
}
}
list1.clear();
list2.clear();
result = (i1+i2)*sizeof(content);
std::cout<<"Memory available for program execution = "<<result/megabyte<<" MB"<<std::endl;
return 0;
} |
Est-ce dangereux ou est-ce parfaitement ok de faire cette opération au lancement du programme ? (si vous avez une solution plus élégante, je suis preneur).
Merci beaucoup.
Partager