2010-10-26 10 views
5

En gcc 4.5 la pila debe estar alineada con un límite de 16 bytes al llamar a una función (las versiones anteriores solo requerían una alineación de 4 bytes).¿Cuál es la compensación para el límite de pila más pequeño?

4-byte es razonable para la máquina de 32 bits. 16-byte es fácil de alinear con solo "y 0xfffffff0,% esp".

Pero puede costar mucha más memoria que el límite de 4 bytes, ¿no? En resumen, mi pregunta es ¿por qué gcc 4.5 toma 16 bytes como valor predeterminado? ¿Es valioso?

¡Muchas gracias!

Respuesta

3

Varias de las extensiones vectoriales para procesadores modernos requieren alineación de 16 bytes para cargas/almacenes. Algunas arquitecturas ofrecen cargas desalineadas, pero generalmente estas son significativamente más lentas.

Puede haber algunos beneficios en esta alineación para memcpy y otras operaciones similares de bajo nivel que se encuentran con fuentes/destinos más estrictamente alineados con más frecuencia.

Además, casi seguramente aumenta las posibilidades de éxito de la auto vectorización, que es algo que las versiones recientes de gcc han incluido.

Cuestiones relacionadas