Estoy lidiando con muchas cadenas en mi programa. Estos datos de cadena no cambian durante toda la vida después de que se leen en mi programa.Cómo liberar la capacidad no utilizada de una cadena
Pero como la cadena C++ se reserva capacidad, desperdician mucho espacio que no se usará con seguridad. Traté de liberar esos espacios, pero no funcionó.
El siguiente es el código simple que he intentado:
string temp = "123456789";
string str;
cout << str.capacity() << endl;
str.reserve(16);
cout << str.capacity() << endl;
// capacity is 31 on my computer
str += temp;
cout << str.capacity() << endl;
str.reserve(16);
cout << str.capacity() << endl;
// can't release. The capacity is still 31.
(El compilador de Visual C++)
Cómo podría liberarlo?
Tener en realidad te quedas sin memoria? Si no, esta es una optimización prematura. Si se ha quedado sin memoria, ¿qué objetos dominarán realmente su asignación de memoria? El punto es que este tipo de cosas no es útil. –
No hay forma de forzar al asignador a usar menos bytes ** para la construcción inicial de una cadena dada ** - al menos no sin escribir su propia plantilla de clase de asignador STL (y posiblemente ni siquiera entonces). –