Hola, muy buenas. La duda que tengo viene de que yo creía que una cadena en C++ (con std::string) se almacenaba en el heap (en el montón), pero con el código que voy a mostrar ahora parece que se almacena en la pila. Por eso pregunto, ¿std::string guarda la cadena en el heap o en la pila?
Código por el que pienso que una cadena se almacena en la pila
#include <iostream>
#include <string>
#include <memory>
int main() {
std::string cadena = "Hola";
const char *cadena_c = (const char *)(addressof(cadena));
unsigned int i = 0;
std::cout << std::hex;
for(i = 0; i < sizeof(cadena); i++)
std::cout << (unsigned int)cadena_c[i] << " - " << cadena_c[i] << std::endl;
return 0;
}
Esta es la salida que obtengo con MinGW-w64 (resultado similar con g++ de Ubuntu):
10 - ►
fffffffe - ■
23 - #
0 -
0 -
0 -
0 -
0 -
4 - ♦
0 -
0 -
0 -
0 -
0 -
0 -
0 -
48 - H
6f - o
6c - l
61 - a
0 -
ffffffff -
ffffffff -
ffffffff -
fffffff5 - §
18 - ↑
40 - @
0 -
0 -
0 -
0 -
0 -
Como ven, se ve claramente que está en la pila (al menos yo lo veo así, quizás me equivoque).
Si se almacena en la pila, es raro porque según la página de cplusplus, incluso el constructor lanza una excepción si falla a la hora de asignar memoria. Que yo sepa, el stack ya lo tenemos asignado...
A bad_alloc exception is thrown if the function fails when attempting to allocate storage.
Espero que me puedan aclarar la duda :D Muchas gracias de antemano