que quería hacer simplemente esto mismo hace poco y encontró el siguiente código iluminando:
Chronium's stack_container.h
Se define un nuevo std::allocator
que puede proporcionar la asignación basado en la pila para la asignación inicial de almacenamiento para contenedores STL. Terminé encontrando una forma diferente de resolver mi problema en particular, así que en realidad no usé el código, pero tal vez te sea útil. Asegúrese de leer los comentarios en el código con respecto al uso y las advertencias.
Para aquellos que han cuestionado la utilidad y la cordura de hacer esto, tenga en cuenta:
- A menudo se sabe a priori que la cadena tiene un tamaño máximo razonable. Por ejemplo, si la cadena va a almacenar un entero de 32 bits con formato decimal, sabrá que no necesita más de 11 caracteres para hacerlo. No hay necesidad de una cadena que pueda crecer dinámicamente hasta un tamaño ilimitado en ese caso.
- La asignación de la pila es más rápida en muchos casos que la asignación desde el montón.
- Si la cadena se crea y destruye con frecuencia (supongamos que es una variable local en una función de utilidad comúnmente utilizada), la asignación desde la pila en lugar del montón evitará la fragmentación inductora en el asignador de montón. Para las aplicaciones que usan mucha memoria, esto podría ser un cambio de juego.
Algunas personas han comentado que una cadena que usa la asignación basada en la pila no será std::string
como si esto de alguna manera disminuyera su utilidad. Es cierto que no puede usar los dos indistintamente, por lo que no podrá pasar su stackstring
a funciones que esperan un std::string
. Pero (si lo haces bien), usted será capaz de utilizar todas las mismas funciones miembro en su stackstring
que se utiliza ahora en std::string
, como find_first_of()
, append()
, etc. begin()
y end()
todavía no tendrán ningún problema, por lo que será capaz de usar muchos de los algoritmos STL. Claro, no será std::string
en el sentido más estricto, pero seguirá siendo una "cadena" en el sentido práctico, y aún será bastante útil.
Permítanme enmendar eso a "¿cómo puedo crear una std :: basic_string que esté asignada por completo en la pila?" – poindexter
Solo para hacer un enlace a una pregunta similar: http://stackoverflow.com/questions/354442/looking-for-c-stl-like-vector-class-but-using-stack-storage –