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