Я могу понять это требование для старых систем PPC RISC и даже для x86-64, но для старого испробованного x86? В этом случае стек должен быть выровнен только на 4 байтовых границах. Да, некоторые инструкции MMX/SSE требуют 16-битных выравниваний, но если это требование вызываемого абонента, то это должно гарантировать правильность выравнивания. Зачем требовать каждого звонящего с этим дополнительным требованием? Это может привести к некоторому снижению производительности, потому что каждый узел вызова должен управлять этим требованием. Я что-то пропустил?
Обновление:. После некоторого расследования этого и некоторых консультаций с некоторыми внутренними коллегами у меня есть некоторые теории об этом:
- Согласованность между версией ОС PPC, x86 и x64
- Кажется, что GGC-кодеген теперь последовательно выполняет sub esp, xxx, а затем "переносит" данные в стек, а не просто выполняет команду "push". Это может быть быстрее на некоторых аппаратных средствах.
- Хотя это немного усложняет сайты вызовов, при использовании стандартного соглашения "cdecl", когда вызывающий пользователь очищает стек, очень мало дополнительных накладных расходов.
Проблема, с которой я столкнулась с последним, заключается в том, что для вызова соглашений, которые полагаются на очистку стека, вышеуказанные требования действительно "угадывают" код. Например, какой-то компилятор решил реализовать более быстрый стиль вызова на основе регистров для собственного внутреннего использования (т.е. Любой код, который не предназначен для вызова с других языков или источников)? Это свойство выравнивания стека может свести на нет некоторые достижения в производительности, достигнутые при передаче некоторых параметров в регистры.
Обновление: Пока единственные реальные ответы были согласованными, но для меня это слишком легко ответить. У меня есть более чем 20-летний опыт работы с архитектурой x86, и если согласованность, а не производительность или что-то еще конкретное, на самом деле причина, то я почтительно полагаю, что это немного наивно для разработчиков, требующих этого. Они игнорируют почти три десятилетия инструментов и поддержки. Особенно, если они ожидают, что поставщики инструментов быстро и легко адаптируют свои инструменты для своей платформы (возможно, не... it есть Apple...), не перепрыгивая через несколько, казалось бы, ненужных обручей.
Я расскажу эту тему еще раз, а затем закрою ее...