В какой момент память обычно выделяется для локальных переменных в C ++?

Я отлаживаю довольно странное переполнение стека, предположительно вызванное выделением слишком больших переменных в стеке, и я хотел бы прояснить следующее.

Предположим, у меня есть следующая функция:

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 ) );
    }
 }

Я понимаю, что это зависит от компилятора, а также от того, что решит оптимизатор, но какова типичная стратегия выделения памяти для этих локальных переменных?

Будет ли наихудший случай (1 + 512 килобайт) быть выделен сразу после вводится функция, или сначала будет выделен 1 килобайт, а затем, в зависимости от условия, дополнительно будет выделен 1 или 512 килобайт?

26
задан sharptooth 17 August 2011 в 07:05
поделиться