
Envoyé par
loufoque
Ce n'est pas possible. Allocator aurait besoin de supporter l'agrandissement en-place pour que ce le soit.
Tout ce que permet l'allocateur, c'est d'allouer un objet et de donner le pointeur vers celui-ci ou de libérer des objets précédemment alloués. Il n'y a aucun moyen pour l'allocateur de savoir qu'il peut mapper un segment de mémoire libre à la fin d'un bloc pour l'étendre.
Si, en utilisant le paramètre hint de la fonction qui effectue l'allocation. Ce paramètre, tel que le spécifie la norme, peut être utilisé pour passer un pointeur - par exemple l'adresse virtuelle du segment de mémoire déjà alloué.
La fonction d'allocation est définie par :
pointer allocate(size_type, allocator<void>::const_pointer hint = 0);
Avec le texte :
hint either 0 or previously obtained from member
allocate and not yet passed to member
deallocate. The value
hint may be used by an implementation to help improve performance.
Remark: the storage is obtained by calling ::operator new(std::size_t), but it is unspecified when or how often this function is called. The use of
hint is unspecified, but intended as an aid to locality if an implementation so desire.
Partager