Je peux comprendre cette exigence pour le vieux PPC les systèmes RISC et même pour x86-64, mais pour les anciens essayé-et-vrai x86? Dans ce cas, la pile doit être aligné sur 4 octets limites seulement. Oui, certains de la MMX/SSE instructions 16 bits alignements, mais si c'est une exigence de l'appelant, alors il doit assurer les alignements sont corrects. Pourquoi le fardeau de tous les appelant avec une exigence? Cela peut effectivement causer des chutes de performances, car chaque appel-le site doit satisfaire à cette exigence. Ai-je raté quelque chose?
Mise à jour: Après quelques enquête et de consultations auprès de certains collègues, j'ai quelques théories à ce sujet:
- La cohérence entre le PPC et x86 et x64 version de l'OS
- Il semble que la GCC codegen maintenant constamment un sub esp,xxx et puis "mov"s les données sur la pile plutôt que de simplement faire un "push" de l'enseignement. Cela pourrait en fait être plus rapide sur certains matériels.
- Bien que cela complique les sites d'appel un peu, il y a très peu de frais généraux supplémentaires lors de l'utilisation de la valeur par défaut "cdecl" convention dans le cas où l'appelant nettoie la pile.
Le problème que j'ai avec le dernier élément, c'est que pour les conventions d'appel, qui s'appuient sur l'appel de nettoyage de la pile, les exigences ci-dessus vraiment "uglifies" la codegen. Par exemple, ce que certains compilateur a décidé de mettre en œuvre plus rapidement à partir des registres d'appel de style pour son propre usage interne (c'est à dire le code qui n'est pas destiné à être appelé à d'autres langues ou les sources)? Cette pile-alignement chose pourrait écarter certains des gains de performance obtenus par le passage de quelques paramètres dans les registres.
Mise à jour: jusqu'à présent les seules vraies réponses ont été cohérence, mais pour moi c'est un peu trop facile de réponse. J'ai bien plus de 20 ans d'expérience avec l'architecture x86 et de consistance, pas de performance, ou de quelque chose de concret, c'est vraiment la raison, alors j'ai l'honneur de suggérer que c'est un peu naïf pour les développeurs de l'exiger. Ils sont ignorant près de trois décennies d'outils et de soutien. Surtout si ils attendent les fournisseurs d'outils pour adapter rapidement et facilement leurs outils pour leur plate-forme (peut-être pas... c' est Apple...) sans avoir à sauter à travers plusieurs apparemment inutiles cerceaux.
Je vais donner à ce sujet un autre jour, ou alors la fermer...