Я отлаживаю довольно странное переполнение стека, предположительно вызванное выделением слишком больших переменных в стеке, и я хотел бы прояснить следующее.
Предположим, у меня есть следующая функция:
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 килобайт?