Я смотрю на некоторый оптимизированный код сборки, предназначенный для платформы x86 (32-разрядная версия) и VxWorks 6.8.У меня есть пять локальных переменных (кроме трех переданных параметров), и эти пять переменных набираются следующим образом: char[200], char*, int, int, fd_set
.Три переданные переменные имеют тип int, int, bool
.Когда я смотрю на разборку, кадр стека создается следующим образом:
push ebp
mov ebp,esp
push edi
push esi
push ebx
sub esp,0x10fc
Что мне интересно, так это последняя строка, так как она выделяет 4348 байтов в стеке для пяти локальных компьютеров, что выглядит как далекослишком много местаТакже: второй локальный (char*
) используется для обхода каждого байта в первом локальном (char[200]
).Любое понимание того, почему так много места выделяется, будет с благодарностью.