2010-10-26 14 views
5

Dans gcc 4.5, la pile doit être alignée sur une limite de 16 octets lors de l'appel d'une fonction (les versions précédentes ne nécessitaient qu'un alignement de 4 octets).Quel est le compromis pour la plus petite limite de la pile?

4 octets est raisonnable pour une machine 32 bits. 16 octets est facile à aligner juste "et 0xfffffff0,% esp".

Mais cela peut coûter beaucoup plus de mémoire que la limite de 4 octets, n'est-ce pas? En bref, ma question est pourquoi gcc 4.5 prend 16 octets par défaut? Est-ce utile?

Merci beaucoup!

Répondre

3

Un certain nombre d'extensions vectorielles pour les processeurs modernes nécessitent un alignement de 16 octets pour les charges/mémoires. Certaines architectures offrent des charges non alignées, mais elles sont généralement beaucoup plus lentes.

Cet alignement peut présenter des avantages pour memcpy et d'autres opérations de bas niveau similaires rencontrant plus fréquemment des sources/destinations plus strictement alignées.

De plus, cela augmente certainement les chances de réussite de la vectorisation automatique, ce que les versions récentes de gcc ont inclus.

Questions connexes