Вы, вероятно, не хотите их удалять - обычно это код, который распределяет и освобождает ваши локальные переменные. Если вы удалите их, ваш код будет растоптан по всем адресам возврата и тому подобное.
Единственный безопасный способ избавиться от них - не использовать локальные переменные. Даже в макросах. И будьте очень осторожны с встроенными функциями, поскольку у них часто есть свои собственные местные жители, которые будут вставлены вместе с вашими. Возможно, вы захотите явно отключить встраивание функции для этого раздела кода, если можете.
Если вы абсолютно уверены, что дополнения и сабвуферы не нужны (и я имею в виду действительно, действительно уверен), на моей машине GCC выполняет некоторые манипуляции со стеком, чтобы выровнять стек на границах 16 байт. Вы можете сказать «-mpreferred-stack-border = 2», что будет выравнивать по 4-байтовым границам - что в любом случае любят делать процессоры x86, поэтому код для его выравнивания не генерируется. Работает на моей коробке с моим GCC; int main() { return 0; }
превратился в
main:
xorl %eax, %eax
ret
но код выравнивания выглядел по-другому с самого начала ... так что, возможно, это не проблема для вас.
Просто, чтобы вы были предупреждены: оптимизация вызывает много странных вещей, подобных этому. Будьте осторожны с языком ассемблера, написанным вручную, и оптимизированным кодом , особенно когда вы делаете что-то неструктурированное, например, переход из середины одной функции в другую.