He oído que las versiones recientes de gcc son muy buenas para convertir llamadas a través de punteros a llamadas directas. Sin embargo, no puedo encontrar nada al respecto en la web o la vista rápida del código fuente de gcc. ¿Alguien sabe si esto es realmente cierto y, de ser así, qué algoritmo usa para hacer esto?¿Qué algoritmo usa gcc para convertir llamadas a través de punteros a llamadas directas?
5
A
Respuesta
0
Es solo una forma de propagación de valores. Si puedo probar que el puntero del objeto p (a un calss virtual) siempre apunta a un objeto de una determinada clase concreta, entonces puedo llamar directamente a las funciones miembro de esa clase. Si no, tengo que pasar por el vtable.
1
Puede encontrar este artículo interesante. Tiene fecha de 2005, y no estoy seguro si eso es 'reciente' suficiente, pero tiene que ver con el asunto de forma integral:
Cuestiones relacionadas
- 1. gdb impresión bonita con llamadas a funciones directas
- 2. ¿Ensamblaje de llamadas en GCC?
- 3. Evitar llamadas a floor()
- 4. Monitoreo de llamadas de aplicaciones a DLL
- 5. ¿DEBO RESTABLECER mis llamadas RPC a través de HTTP?
- 6. Optimizar llamadas administradas a nativas
- 7. Diagrama UML para llamadas a funciones
- 8. Llamadas múltiples a viewDidLoad/loadView
- 9. Linq a NHibernate varias llamadas a OrderBy
- 10. Haciendo múltiples llamadas a fb.api
- 11. punteros inteligentes, typedefs y declaraciones directas
- 12. ¿Qué son los registros de llamadas y de llamadas guardadas?
- 13. JSTL, Frijoles y llamadas a métodos
- 14. Supresión de llamadas al sistema al usar gcc/g ++
- 15. Códigos de Python y llamadas a funciones
- 16. ¿Qué algoritmo usa buildbot para asignar constructores a esclavos?
- 17. Disparar shouldStartLoadWithRequest con múltiples llamadas a window.location.href
- 18. Optimización de llamadas a bases de datos
- 19. Aumento de eventos vs llamadas a métodos directos diferencias
- 20. Windows C++: ¿Cómo puedo redireccionar stderr para llamadas a fprintf?
- 21. Reducir el número de llamadas a getTableCellRendererComponent
- 22. ¿Las llamadas sucesivas a recvfrom() pierden datos?
- 23. Programación de llamadas a una tasa fija
- 24. Llamadas a métodos de interceptación en Python
- 25. JAVA SAX parser llamadas divididas a caracteres()
- 26. Cómo escribir pruebas unitarias para llamadas a bases de datos
- 27. Manipular con punteros a objetos de clases derivadas a través de punteros a clase base objetos
- 28. ¿Qué tan caras son las llamadas a funciones en JavaScript?
- 29. JMock Permitir otras llamadas a métodos
- 30. ¿Por qué las lambdas pueden convertir llamadas a funciones en Acciones?
No estoy familiarizado con el funcionamiento interno de gcc, pero en general, si un compilador puede demostrar que un puntero de función solo puede tener un valor particular en determinado sitio de llamada, luego esa llamada puede codificarse como una llamada directa al valor de puntero específico en lugar de una llamada indirecta a través del puntero de función. –