El reordenamiento de GCC de las instrucciones de lectura / escritura

Las primitivas de sincronización de Linux (spinlock, mutex, RCU) usan instrucciones de barrera de memoria para forzar que las instrucciones de acceso a la memoria no se vuelvan a ordenar. Y esta reordenación puede ser realizada por la propia CPU o por el compilador.

¿Alguien puede mostrar algunos ejemplos de código producido por GCC donde se realiza tal reordenamiento? Estoy interesado principalmente en x86. La razón por la que pregunto esto es para entender cómo GCC decide qué instrucciones se pueden reordenar. Las diferentes arquitecturas mirco x86 (por ejemplo: puente arenoso versus puente de hiedra) usan una arquitectura de caché diferente. Por lo tanto, me pregunto cómo GCC realiza una reordenación efectiva que ayuda en el rendimiento de la ejecución, independientemente de la arquitectura de caché. Algunos ejemplos de código C y el código reordenado generado por GCC serían muy útiles. ¡Gracias!

Respuestas a la pregunta(2)

Su respuesta a la pregunta