¿En qué momento se suele asignar memoria para variables locales en C ++?
Estoy depurando un desbordamiento de pila bastante extraño supuestamente causado por la asignación de variables demasiado grandes en la pila y me gustaría aclarar lo siguiente.
Supongo que tengo la siguiente función:
void function()
{
char buffer[1 * 1024];
if( condition ) {
char buffer[1 * 1024];
doSomething( buffer, sizeof( buffer ) );
} else {
char buffer[512 * 1024];
doSomething( buffer, sizeof( buffer ) );
}
}
Entiendo que depende del compilador y también depende de lo que decida el optimizador, pero cuál es el estrategia típica para asignar memoria para esas variables locales?
¿Se asignará el peor de los casos (1 + 512 kilobytes) inmediatamente una vez que se ingrese la función o se asignará primero 1 kilobyte y luego, dependiendo de la condición, se asignarán adicionalmente 1 o 512 kilobytes?