Pregunta

Tengo una pregunta (potencialmente tonta) sobre el STL de C++.Cuando creo un contenedor (vector, conjunto, mapa, etc.), ¿se asigna 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 la pila?

¿Fue útil?

Solución

Las clases STL asignan de forma predeterminada sus buffers internos desde el montón, aunque estas clases también permiten asignadores personalizados que permiten al usuario especificar una ubicación alternativa desde la cual realizar la asignación, por ejemplo.un grupo de memoria compartida.

Otros consejos

El asignador predeterminado para contenedores STL utiliza el operador nuevo y eliminar, por lo que es cualquiera que sea la ruta para el tipo contenido.(En general, proviene del montón a menos que haga algo para anularlo).

No obtendrá un desbordamiento de pila al asignar 5 millones de cadenas.Incluso si creara un asignador basado en pila, probablemente se desbordaría incluso antes de insertar una cadena.

El contenedor en sí se asigna donde usted decide (puede ser la pila, el montón, el miembro de un objeto, etc.) pero la memoria que utiliza, de forma predeterminada, como otros describen, se toma en la Tienda gratuita (administrada a través de nuevas y eliminaciones). que no es lo mismo que el montón (administrado a través de malloc/free).

¡No mezcles los dos!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top