2011-07-30 12 views
13

Leyendo a través del ensamblado que GCC genera para los archivos C en mi proyecto, noto que las funciones no se generan en ensamblador en el mismo orden en que aparecen en el archivo fuente. ¿Cuál es el objetivo de este reordenamiento y qué heurística usa GCC para decidir el pedido? (¿Es solo un artefacto de las funciones de retención de la estructura de datos?) Esto no es -freorder-functions, ya que no estoy usando -fprofile-arcs.¿Cómo decide GCC el orden de salida de las funciones de ensamblaje?

Respuesta

9

Las últimas partes de la fase de optimización interprocedimiento utilizan un recorrido de abajo hacia arriba del gráfico de llamadas; ese es el orden que ves Hay un documento sobre el diseño original de esta parte de GCC here (desde hace un tiempo, esta cosa apareció por primera vez en GCC 3.4).

Puede evitar el reordenamiento utilizando -fno-toplevel-reorder (o -fno-unit-at-a-time para versiones menos recientes de GCC), pero eso desactiva algunas de las optimizaciones relacionadas.

Cuestiones relacionadas