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?
13
A
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
- 1. ¿Cuándo importa el orden de las funciones?
- 2. Usando el atributo "desnudo" para las funciones de GCC
- 3. ¿Ensamblaje de llamadas en GCC?
- 4. ¿Cómo puedo alinear las líneas fuente con la salida del ensamblaje usando GCC?
- 5. Ensamblaje en línea de GCC: restricciones
- 6. Etiquetas en ensamblaje en línea de GCC
- 7. ¿Por qué GCC mantiene las funciones vacías?
- 8. gcc/g ++ tipo de salida
- 9. ¿El compilador decide cuándo alinear mis funciones (en C++)?
- 10. Python: ¿salida de funciones?
- 11. orden de funciones en el archivo cpp
- 12. Funciones anónimas utilizando las expresiones de declaración GCC
- 13. Tutoriales/libros sobre la comprensión de la salida de ensamblaje
- 14. Cómo controlar el orden de las funciones a las que se llama en jQuery $ (documento) .ready
- 15. C++ Orden de evaluación de salida con llamadas a funciones incrustadas
- 16. Servidor SQL: cómo enumerar todas las funciones/procedimientos/objetos de CLR para el ensamblaje
- 17. Calling Clojure funciones de orden superior
- 18. ¿Cómo puedo forzar a gcc a usar implementaciones personalizadas de las funciones implementadas de newlibc?
- 19. funciones de salida en C
- 20. GCC Inline-ensamblaje: llamar DWORD PTR
- 21. ¿Cómo imponer el orden de los bits de estructura con el compilador de GCC?
- 22. ¿Cómo se establece el orden de las bibliotecas en automake?
- 23. Cómo guardar la salida de error de gcc para presentar
- 24. funciones de orden superior en C
- 25. ¿Se ha cambiado el orden de enlace GCC?
- 26. ¿Cómo puedo cambiar el nombre de las filas/columnas de salida de las funciones ** ply de plyr?
- 27. C Alineación de funciones en GCC
- 28. Uso de instrucciones SSE con gcc sin ensamblaje en línea
- 29. ¿Cómo controlo el orden de las propiedades en mi salida JSON?
- 30. algunas preguntas sobre el orden de búsqueda del enlazador GCC