Código por el que pienso que una cadena se almacena en la pila
Código
#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):
Código:
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...
Código:
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