2010-10-26 7 views
5

In gcc 4.5 lo stack deve essere allineato a un limite di 16 byte quando si chiama una funzione (le versioni precedenti richiedevano solo un allineamento di 4 byte).Qual è il trade off per il limite dello stack più piccolo?

4 byte è ragionevole per la macchina a 32 bit. 16 byte è facile da allineare solo con "e 0xfffffff0,% esp".

Ma potrebbe costare molto più memoria del limite di 4 byte, non è vero? In breve, la mia domanda è: perché gcc 4.5 considera 16 byte come predefinito? È prezioso?

Grazie mille!

risposta

3

Un numero di estensioni vettoriali per processori moderni richiede un allineamento di 16 byte per carichi/negozi. Alcune architetture offrono carichi non allineati, ma in genere sono molto più lenti.

Potrebbero esserci alcuni vantaggi a questo allineamento per memcpy e altre operazioni di basso livello simili che incontrano sorgenti/destinazioni più strettamente allineate più frequentemente.

Inoltre, aumenta quasi certamente le probabilità che la vettorizzazione automatica abbia esito positivo, che è una versione recente di gcc inclusa.

Problemi correlati