Страница 1 из 1

Проблема при отведении буфера c gcc v3.2.2

Добавлено: 09 июн 2005, 17:29
flux
Прошу помочь кто знает что у меня происходит... Есть элементарная прога на C:

void function() {
char buffer[20];
char *ret;
return;
}
int main() {
function();
return;
}

Почему когда я отвожу буфер в 20 байт в ассемблерном коде я вижу следующее:

function:
pushl %ebp
movl %esp, %ebp
subl $56, %esp

56 байт... почему не 24? вроде буфер 5 слов и указатель 1... 6 в сумме получается...

RH Linux 9.0, gcc v3.2.2 compiler.

Добавлено: 10 июн 2005, 01:28
Eugie
Думаю, это какая-то минимальная защита на случай stack overflow. Т.е. фрейм создается 'с запасом', чтобы небольшое переполнение не разрушало стек напрочь. C/C++ компиляторы обычно встраивают в код возврата вызов спец. процедуру проверки целостности стека, типа _chkesp (VC++) - возможно, это требуется для нее.

Добавлено: 10 июн 2005, 10:43
flux
Тогда просто я думаю этот размер должен быть статичным, проэксперементировав с размером буфера я просто так и не нашел на сколько он прибавляет стек... каждый раз разный размер и четкого алгоритма так я и не выявил...

Добавлено: 12 июн 2005, 17:43
Eugie
Не знаю, как gcc, а VC++ создает stack frame с запасом 64 байта, даже при отсутствии локальных переменных.