¿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?

Respuestas a la pregunta(5)

Su respuesta a la pregunta