sort geeksforgeeks functions c++ stl

c++ - geeksforgeeks - stl map



Capacidad predeterminada de std:: string (5)

Cuando creo una std :: cadena usando el constructor predeterminado, ¿hay ALGUNA memoria asignada en el montón? Espero que la respuesta no dependa de la implementación y esté estandarizada. Considera lo siguiente:

std::string myString;


Depende de la implementación. Algunas implementaciones de cadena utilizan una pequeña cantidad de almacenamiento asignado automáticamente para cadenas pequeñas, y luego asignan dinámicamente más para cadenas más grandes.



Desafortunadamente, la respuesta es no según N3290.

La Tabla 63 Página 643 dice:

  • data() un puntero no nulo que se puede copiar y puede tener 0 agregado a él
  • size() 0
  • capacity() un valor no especificado

La tabla es idéntica para C ++ 03.


No, pero no conozco ninguna implementación que asigne memoria en el montón por defecto. Sin embargo, algunos pocos incluyen lo que se denomina optimización de cadena corta (SSO), donde asignan espacio como parte del objeto de cadena en sí, de modo que siempre que no necesite más de esa longitud (parece estar entre 10 y 20 caracteres como regla) puede evitar hacer una asignación de montón por separado.

Aunque eso no está estandarizado.


En general, asignan memoria en el montón. c_str() un ejemplo: c_str() requiere un carácter final NULL ''/ 0''. La mayoría de las implementaciones asignan este NUL /0 antes de tiempo, como parte de la cadena. Por lo tanto, obtendrá al menos un byte asignado, a menudo más.

Si realmente necesitas un comportamiento específico, te aconsejo que escribas tu propia clase. Las clases de búfer / cuerda no son tan difíciles de escribir.