Estoy tratando de aprender un poco más sobre las cadenas de C++.Comprender la eficacia de std :: string
consideran
const char* cstring = "hello";
std::string string(cstring);
y
std::string string("hello");
Estoy en lo cierto al suponer que tanto la tienda "hola" en la sección .data de una aplicación y los bytes se copian a otra área en la heap donde el puntero administrado por std :: string puede acceder a ellos?
¿Cómo podría almacenar eficientemente una cuerda realmente larga? Estoy pensando en una aplicación que lee datos de un flujo de socket. Me temo que la concatenación muchas veces. Me podría imaginar usando una lista vinculada y atravesar esta lista.
¡Las cuerdas me han intimidado por demasiado tiempo!
Cualquier enlace, consejos, explicaciones, más detalles, sería extremadamente útil.
¿Cuánto tiempo es realmente realmente largo? 10 MB? 20 tal vez? ¿O te refieres a algo así como 10 GB? Las computadoras tienen gigabytes de RAM en estos días. –
Pensaba más como 10-100 MB. Sin embargo, esta fue una pregunta abierta, así que no dude en explicar cualquiera =). Estoy bastante seguro de que debido a la administración de la memoria del sistema operativo no puede asignar 10 GB de memoria contigua. Supongo que se necesitaría una lista para tal tamaño. – flumpb
@kispit - En mi máquina de 64 bits puedo asignar memoria hasta que el archivo de intercambio llene el disco duro. ¡Decenas de GB no es un problema! –