Taille maximale d'une liste en mémoire (std::list de la STL)

Taille maximale d'une liste en mémoire (std::list de la STL) - C++ - Programmation

Marsh Posté le 08-02-2008 à 12:00:28    

Je voudrais connaître la taille maximale d'une liste créée à partir de la STL.  
 
Est-elle fixe ?
Peut-on modifier la taille max à volonté ou existe-t-il une valeur seuil critique ?
Dépend-elle d'une version de la STL (s'il existe plusieurs versions...) ?  
Dépend-elle du type d'élément que l'on stocke dans la liste (integer, float, string, objet lamda...) ?
Comment est-elle calculée ?
Que fait exactement resize ?

Reply

Marsh Posté le 08-02-2008 à 12:00:28   

Reply

Marsh Posté le 08-02-2008 à 12:08:33    

kason a écrit :

Je voudrais connaître la taille maximale d'une liste créée à partir de la STL.


 
list::max_size()   [:major dutch]  

Reply

Marsh Posté le 08-02-2008 à 14:06:32    

capitaineigloo a écrit :


 
list::max_size()   [:major dutch]  


 
En fait, je voudrais justement avoir plus de précision sur la valeur que retourne la méthode max_size() :jap:

Reply

Marsh Posté le 08-02-2008 à 14:26:09    

et bien c'est une valeur de type std::list<T>::size_type

Reply

Marsh Posté le 08-02-2008 à 14:29:53    

toutes façons cette valeur ne sert à rien. C'est quoi ta véritable question ? La taille maximale n'est pas fixe de toutes façons.

Reply

Marsh Posté le 08-02-2008 à 15:44:50    

Taz a écrit :

toutes façons cette valeur ne sert à rien. C'est quoi ta véritable question ? La taille maximale n'est pas fixe de toutes façons.


En fait, j'ai un souci lors de l'ajout d'un élément dans une liste. Je voudrais savoir s'il est possible de saturer facilement une std::list. Si la taille maximale n'est pas fixe, quel est son ordre de grandeur ? x fois la taille de l'objet stocké dans la liste ? La version de la librairie est-elle impactée ?
 
J'ai déjà utilisé std::list et je n'ai jamais eu des problèmes d'ajout d'élément auparavant.
Voilà le contexte du problème : dessiner une carte qui contient 4000 vecteurs. Lors du chargement de la carte en mémoire, les points des vecteurs sont stockés dans une liste (on a qqch comme std::list<PointGeo> ). L'exécutable plante et génère un core durant l'ajout d'un élément dans la liste. Avec 1000 vecteurs, la carte se dessine normalement.
 
Il est à noter que le plantage a lieu non sur un push_back mais sur l'allocation d'un nouvel objet de type PointGeo...

Reply

Marsh Posté le 08-02-2008 à 20:30:36    

Mouarf, une classe de liste même pas foutue de gérer 4000 pauvres éléments, c'est soit qu'elle a été conçue avec les pieds d'un cul-de-jatte, soit que l'erreur vient de ton coté. Venant de la STL, je me pencherais d'abord sur ton code (au hasard buffer overflow, d'autant plus que ça foire au moment de l'allocation : symptômes typiques d'une écriture dans un espace non réservé).

Reply

Marsh Posté le 09-02-2008 à 16:52:28    

Tant que tu ne ramasses pas de std::bad_alloc, c'est que ce n'est pas un problème de capacité mémoire.

Reply

Marsh Posté le 11-02-2008 à 16:57:50    

OK, mais il y a qqch qui me tracasse:
En termes de capacité, on ne devrait pas avoir la même capacité max pour des listes dans lesquelles on stocke des entiers et pour celles dans lesquelles on stocke des objets (classe avec pas mal d'attributs) ?

Reply

Marsh Posté le 11-02-2008 à 17:02:57    

ca n'a aucun rapport. Les listes utilisent l'allocation dynamique pour leur contenu. on est pas en PASCAL

Message cité 1 fois
Message édité par Joel F le 11-02-2008 à 17:03:10
Reply

Marsh Posté le 11-02-2008 à 17:02:57   

Reply

Marsh Posté le 12-02-2008 à 16:58:03    

Joel F a écrit :

ca n'a aucun rapport. Les listes utilisent l'allocation dynamique pour leur contenu. on est pas en PASCAL


OK, je vois :whistle:  

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed