Рамка стека VxWorks необычно большая - PullRequest
0 голосов
/ 03 декабря 2011

Я смотрю на некоторый оптимизированный код сборки, предназначенный для платформы 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]).Любое понимание того, почему так много места выделяется, будет с благодарностью.

1 Ответ

1 голос
/ 04 декабря 2011

fd_set обычно содержит 1024 бита или 128 байт.

Скорее всего, вы передаете fd_set по значению некоторым другим функциям, создавая в процессе безымянные временные значения.

Вы можете скомпилировать исходный код с помощью -fdump-tree-all и проверить полученные выходные файлы.Вы должны увидеть все временные файлы, созданные GCC.

...