C++ et mémoire

Moidibe -  
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

J'ai un petit souci avec un programme en C++. Il est assez long niveau ligne de code mais niveau mémoire il est en dessous des 2 mo. J'ai de très très nombreuses erreurs de pages (page fault en anglais) qui ralentissent son exécution. La vitesse d'exécution est un paramètre important pour le programme.

Je crée très souvent de nouvelles variables dynamiquement et les détruit assez rapidement si les données stockées ne me conviennent pas. A priori d'après ce que j'ai compris les erreurs de pages viendrait de là parce que je demande d'allouer de la mémoire. C'est encore un peu flou pour moi...

Est ce que si j'alloue un grand tableau et si je réutilise l'espace si les données ne me conviennent pas résoudra mon problème ?
Que me conseillez vous ?

Je préfère demander conseil car tout changer me demandera quelques jours de travail...

Bonne journée et merci.

11 réponses

Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
Salut.
Je ne connaissais pas ce type de problème. J'ai trouvé ça qui explique le problème : https://forums.codeguru.com/showthread.php?252410-Page-Faults
D'après ce que je lis c'est que tu dois utilisé beaucoup de mémoire.
Ppourquoi ne pas utilisé les conteneurs de la STL, ils sont normalement fait pour gérer la mémoire au mieux selon ce que tu veux faire.
Désolé de ne pas pouvoir t'aider plus que ça.
0
Moidibe
 
Je suis en train de regardé ce tutorial :

http://artis.imag.fr/~Xavier.Decoret/resources/stl_tutorial/sommaire.html

Je trouve ca un peu compliqué à utiliser. Je voudrais juste un moyen pour mieux gérer l'écriture et la suppression en mémoire mais là ca me semble être une véritable machine à gaz...
Ensuite comment choisir le type de conteneur ? J'ai déjà une liste chainé dans mon programme. Mes éléments de ma liste sont petits. Un conseil ?
0
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
Les conteneurs de la STL, sont très simple à utiliser. Ils ont été créer et optimiser (en mémoire et temps de calcul) pour gérer ce que tu veux faire. Donc pas une machine à gaz.
Pour le choix, je ne suis pas le mieux placer pour t'aider.
0
Moidibe
 
Je vous remercie pour vos réponse.

Quand j'essaie d'utiliser le conteneur vector dans une fonction ca ne marche pas tandis que dans le main je n'ai aucun problème. J'ai bien sur fait un #include<vector> au début du programme donc je ne comprends pas...

Je précise que j'ai Microsoft Visual C++ 2005.

Merci encore.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Moidibe
 
J'ajoute le code et les erreurs.

Code :
vector<int> datas;

Erreurs:
error C2065: 'vector' : identificateur non déclaré
error C2062: type 'int' inattendu

Bon d'après les erreurs, il ne reconnait pas la librairie vector ou il ignore mon #include <vector> mais je ne comprend pas pourquoi.

Avez-vous des conseils dans l'utilisation du STL ? Je découvre ça et c'est vraiment nouveau, je suis un peu perdu...

Merci.
0
moi
 
Bon j'ai finalement trouvé l'erreur en cherchant sur internet. Je me réponds mais je ne suis pas (encore) devenu fou c'est juste pour que ca soit éventuellement utile à quelqu'un d'autre.
Il fallait mettre "using namespace std;" avant le fichier contenant ma fonction qui contenant "vector <int> datas".
Simple et bête comme d'habitude... :-D

Bon à part ça, je suis toujours partant pour quelques conseils, infos ou ruses de sioux pour la STL. Si vous avez également quelques liens avec une bonne explication sur la STL qui me permettrait de bien comprendre, je suis preneur aussi.

Merci pour tout.
0
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
Salut.
J'ai retrouvé ça dans mes documents : http://brunogarcia.chez.com/pdf/stl.pdf
Le chapitre 3 t'intéressera, il présente les différents conteneurs et leurs "performances".
Il y a ça aussi pour l'utilisation de la STL : https://en.cppreference.com/w/Main_Page
0
Moidibe
 
Je te remercie pour tes infos.

J'ai commencé à bien tout lire et j'ai changé d'avis. Je pense que je vais choisir le conteneur "list" plutot que "vector". En fait, je pense effectuer seulement des ajouts au tableau seulement à la fin mais les suppression aussi bien qu'à la fin qu'au mileu. "list" me semble donc mieux adapté.
Vector en cas de suppression d'un élément au milieu de la liste va-t-il déplacer tous les élément suivant ?
0
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
Si j'ai bien compris oui car l'intéret de vector est d'acceder rapidement aux éléments, ils doivent donc être continues en mémoire, ce qui implique un déplacement des données en cas de suppression ou insertion au milieu du vector.
Je n'en connais pas plus que les documents que je t'ai fourni, c'est pour ça que je t'ai laissé faire ton choix sans rien te conseillé.
0
Moidibe
 
Je suis en train de modifier mon programme mais j'essaie de limiter les modifications sinon ca va etre ingérable.
On verra si avec seulement le conteneur list ca limitera mon problème. Si ca ne marche pas je vais devoir faire une refonte totale du programme et ca risque de prendre beaucoup de temps donc je préfère l'éviter...

Voila je te remercie pour ton aide. Je repasserai pour te dire si mes problème sont terminés.
0
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
Une solution pourrai être de modifier ton algorithme. Au lieu de supprimer la mémoire contenant des informations qui ne t'intéressent pas, tu la marque comme inutile et tu l'écrase au prochain besoin. (Je pense que la STL agit ainsi dans une certaine gamme remarque)
0