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