Bonjour à tous,
Y a t il un maximum de taille pour une liste : pas en ce qui concerne le nombre d'éléments mais la taille totale d'un liste dans la mémoire?
Merci d'avance.
Bonjour à tous,
Y a t il un maximum de taille pour une liste : pas en ce qui concerne le nombre d'éléments mais la taille totale d'un liste dans la mémoire?
Merci d'avance.
Probablement, et cela doit être fonction de l'implémentation de la STL, du système hôte et de l'environnement au Runtime.
ok mais y pas une foction que peux me determiner ça ?
Comme cette limitation peut-être être liée à des conditions transitoires, vous ne pourrez jamais avoir la certitude que l'insertion fonctionnera.
Vous pouvez avoir la taille maximale d'une liste dans l’absolue (fonction de l'implémentation STL utilisée) : max_size
http://www.cplusplus.com/reference/stl/list/max_size/
Mais elle garantie juste que si vous essayez dans mettre plus ça plante, pas que si vous en mettez moins elle ne plantera jamais.
Si vous maitrisez bien les exceptions, ce genre de gestion des problèmes ne devrait pas trop vous surprendre.
mais en fait le max_size() ça définit mex nombre d'élément pas la taille en mémoire la liste![]()
Je ne comprends pas trop votre problème.
Dans la Doc :http://www.cplusplus.com/reference/stl/list/push_back/
Le comportement de gestion mémoire de la STL:list est piloté par le paramètre "Allocator" du template std:list.Return value
none
The storage for the new element is allocated using Allocator::allocate(), which may throw exceptions on failure (for the default allocator, bad_alloc is thrown if the allocation request does not succeed).
Si vous ne spécifiez pas ce paramètre de template, c'est que celui par défaut vous convient (il est fonction de l'implémentation de la STL que vous utilisez).
A moins d'utiliser un allocateur particulier ou une STL spécialisées, il y a de grandes chances que cet allocateur ne soit limité que par la mémoire disponible par la C-Runtime, elle-même limitée par les plages d'espace d'adressage virtuelle encore disponibles à un moment T.
Le fait de faire fonctionner votre programme en 32bits sur une machine disposant de 1Go de mémoire physique sous Win98 sans système de swap/mémoire virtuelle ou sur une machine 64bits disposant d'un système de swap de 3To ; devrait augmenter cet espace disponible par un facteur de plusieurs milliards.
Je pense que si vous en êtes à vous posez ce genre de question, c'est qu'il y a un problème de conception ou d'expression du besoin bien en amont.
Faites simple, vous considérez que cela marchera toujours et catchez l'exception d'allocation si vous disposez d'une solution de replie en cas de mémoire saturée.
Mais la mise en place de cette solution de replie dans un environnement potentiellement sans mémoire est loin d'être triviale.
Partager