2008-08-28 17 views
6

Tengo una pregunta (potencialmente tonta) sobre C++ STL. Cuando hago un contenedor (vector, conjunto, mapa, etc.), ¿está asignado en la pila o en el montón? Si hago un conjunto y pongo 5 millones de cadenas, ¿tendré que preocuparme por un desbordamiento de pila?C++ Pregunta STL: asignadores

Respuesta

9

Las clases de STL asignan de forma predeterminada sus almacenamientos intermedios internos del montón, aunque estas clases también permiten asignadores personalizados que permiten a un usuario especificar una ubicación alternativa para asignar desde, p. un grupo de memoria compartida.

3

El asignador predeterminado para contenedores STL utiliza operador new y delete, por lo que es el que sea esa ruta para el tipo que se contiene. (En general, proviene del montón a menos que haga algo para anularlo).

No obtendrá un desbordamiento de la pila al asignar 5 millones de cadenas. Incluso si creó un asignador basado en pila, probablemente se desbordará antes de insertar una cadena.

0

El contenedor en sí se asigna donde usted decida (puede ser la pila, el montón, el miembro de un objeto, etc.) pero la memoria que utiliza es, de forma predeterminada, como otros describen, tomada en Free Store (administrado por nuevo y eliminar) que no es lo mismo que el montón (administrado a través de malloc/free).

Don't mix the two!