¿Permite al compilador alinearlo, sabiendo que solo las funciones de la misma clase pueden acceder a él? ¿O es solo para la conveniencia del programador?¿El modificador de acceso "privado" le da al compilador más espacio para la optimización?
Respuesta
El compilador puede (pero no está obligado a) optimizar como usted sugiere, pero eso no es el punto. El punto de los modificadores de acceso es atrapar ciertas clases (sin juego de palabras) de errores de programación en tiempo de compilación. Las funciones privadas son funciones que, si alguien las llama desde fuera de la clase, sería un error , y desea obtener información al respecto lo antes posible.
(Siempre que formule la pregunta "¿podría el compilador realizar optimizaciones basadas en esta información disponible?", La respuesta es "sí, a menos que haya una regla específica en el estándar que diga que no está permitido" (como las reglas para volatile
, cuyo propósito es inhibir las optimizaciones). Sin embargo, los compiladores no necesariamente molestan optimizando en función de cualquier información dada. No existe, después de todo, ningún requisito para que los compiladores hagan ninguna optimización en primer lugar ! Cuán inteligente es tu compilador, en la actualidad, depende en gran medida de cuánto tiempo estés dispuesto a dejarlo funcionar. El modo PGO de programa completo de MSVC es capaz de subrayar a través del envío de método virtual - adivina el objetivo más probable y retrocede a un regular llamada virtual en tiempo de ejecución si la suposición fue incorrecta, pero ralentiza las compilaciones al menos en un factor de dos).
Solo para agregar que la única buena razón para hacer un método en línea es que es lo suficientemente pequeño. No tiene nada que ver con el lugar desde donde se llama. –
excelente respuesta: D – slartibartfast
¿Puede dar un ejemplo de cómo el compilador podría usar el hecho de que una función es privada para generar código diferente, optimizado de alguna manera? – JohnPS
Los especificadores de acceso forman parte del mecanismo de C++ para implementar los principios de OOP de encapsulación y abstracción y no de optimización para los compiladores.
Algún compilador inteligente puede implementar alguna optimización a través de él, pero no se lo exige el Estándar C++. El propósito de los especificadores de acceso no es la Optimización, sino facilitar las construcciones de lenguaje para los principios soportados por el lenguaje C++.
- 1. ¿Qué hace el modificador "privado"?
- 2. Resharper: cómo desactivar el modificador de acceso 'privado'?
- 3. ¿Debería usar el modificador de acceso privado si es redundante?
- 4. Java: ¿Modificador de acceso más restrictivo que 'protegido', menos restrictivo que 'privado'?
- 5. optimización del compilador para la estabilidad numérica
- 6. Uso del modificador final privado de Scala?
- 7. Cambiando el espacio de nombres de los archivos de recursos (resx) y el modificador de acceso
- 8. optimización del bucle anidado del compilador para acceso a la memoria secuencial.
- 9. paquete modificador privado en Scala 2,8
- 10. método sin modificador de acceso
- 11. ¿Para qué sirve el modificador 'asmlinkage'?
- 12. C# Modificador de acceso predeterminado del método Main()
- 13. Doxygen con el modificador de acceso interno C#
- 14. La optimización del compilador rompe el código de subprocesos múltiples
- 15. ¿Cómo puedo darle al compilador Intellij más espacio en el montón?
- 16. Optimización del compilador, ¿Thread Safe?
- 17. Algoritmo de optimización de espacio abierto
- 18. Optimización del compilador de Java para llamadas a métodos repetidos?
- 19. Modificador de acceso de subclases C++?
- 20. Optimización de estructura de compilador C
- 21. Diferencia entre especificador de acceso y modificador de acceso
- 22. Java: acceso al constructor privado con parámetros de tipo
- 23. Cómo aumentar el modificador de acceso de una propiedad
- 24. modificador de acceso predeterminado para enum en C#
- 25. C/C++ retroalimentación compilador de optimización
- 26. c99 __restrict y compilador de optimización
- 27. La optimización de GCC da como resultado un "símbolo indefinido" en el tiempo de ejecución
- 28. ¿Hay alguna razón por la que no pueda definir el modificador de acceso en un método o en una interfaz?
- 29. Modificador de acceso predeterminado en C#
- 30. GCC da respuesta incorrecta con la optimización activada
Cualquier compilador decente alineará un método no virtual cuando pueda y cuando tenga sentido. No tiene nada que ver con la accesibilidad ya que eso no modifica la implementación del método. –
Iba a hacer la misma pregunta la semana pasada. No podría pensar en ningún ejemplo donde el compilador generaría código diferente porque una función es privada. ¿Algún ejemplo? – JohnPS