Gastos generales de la OLP

 

En relación con una tarea que requiere muchos recursos, ha surgido una pregunta: cuál es la sobrecarga de utilizar la POO en comparación con la programación procedimental convencional.

¿Alguien ha hecho estas pruebas?

Me interesa la diferencia entre:

  1. Llamada a una función con parámetros
  2. Llamada a una función sin parámetros
  3. Llamada a la macro con la funcionalidad de la función anterior
  4. Llamada a la función - método de una clase
  5. Llamada a una función virtual

 

¿De qué tipo de gastos generales estamos hablando?

Si hablamos de código máquina, entonces, hasta donde yo sé, la función virtual llama al procedimiento indirectamente, a través de la tabla de funciones virtuales. Pero en el caso de las funciones normales es una llamada directa. Creo que hay muy pocos gastos generales.

La sobrecarga del programador es mucho más importante: la escritura y el mantenimiento del código, la corrección de errores...

 

Las funciones sin parámetros son más rápidas que las funciones con parámetros.

 
Dmitry Fedoseev:

Las funciones sin parámetros son más rápidas que las funciones con parámetros.


Por supuesto, he estado dando vueltas en ensamblador durante 2 años )) Es cierto, para los procesadores integrados, pero C++ sigue siendo C++. Incluso una función sin parámetros tiene un prólogo y un epílogo, que también lleva tiempo.

La forma más rápida, por supuesto, es utilizar una macro diseñada para parecer una función. Es una pena que no haya funciones inline en MQL, pero las macros son un sustituto de

 
George Merts:

¿De qué tipo de gastos generales estamos hablando?

Si hablamos de código máquina, entonces, hasta donde yo sé, la función virtual llama al procedimiento indirectamente, a través de la tabla de funciones virtuales. Y en el caso de las funciones normales es una llamada directa. Creo que hay muy pocos gastos generales.

La sobrecarga del programador es mucho más importante: escritura y mantenimiento del código, corrección de errores...


Por supuesto, no nos importa la sobrecarga de tiempo de ejecución ni los kilobytes adicionales. No nos importan esos kilobytes extra.

 

Una macro sería, por supuesto, la más rápida.

 
Alexey Volchanskiy:

La forma más rápida es, por supuesto, una macro diseñada como una función. Lástima, MQL no tiene funciones en línea, pero una macro sería un sustituto

Rinat dijo que MT tiene una función seria en línea, y da buenos resultados.

 
George Merts:

Rinat dijo que MT - un inliner serio funciona, y da buenos resultados.


Sí, según mis observaciones personales, en MT4 el trabajo del inliner depende del tamaño de la pila (memoria asignada para las variables en la pila) y del número de variables.
Pero en MT5 la dependencia del tamaño de la pila parece haberse eliminado y el optimizador es más asistente en general.

 
Alexey Volchanskiy:

En relación con una tarea que requiere muchos recursos, ha surgido una pregunta: ¿cuál es la sobrecarga de utilizar la POO en comparación con la programación procedimental convencional?

¿Alguien ha hecho estas pruebas?

Me interesa la diferencia entre:

  1. Llamada a una función con parámetros
  2. Llamada a una función sin parámetros
  3. Llamada a la macro con la funcionalidad de la función anterior
  4. Llamada a la función - método de una clase
  5. Llamada a una función virtual

Si se dispone de bibliotecas OOP listas para usar, se reduce el tiempo de desarrollo de la aplicación. La velocidad de ejecución puede disminuir cuando se llama a la función virtual.

El único matiz es la disponibilidad de buenas bibliotecas OOP.

"Biblioteca estándar" viola mi sentido de la belleza y me hace ir a la DLL y codificar tranquilamente en C++


 
George Merts:

Rinat dijo que en MT - un inliner serio funciona, y da buenos resultados.

Sí, el inliner es muy agresivo y automático.

El optimizador de x64 también está por encima de la versión de 32 bits (esta rama está completamente parada y sin desarrollar). Además, el optimizador x64 sabe cómo desenrollar la mayoría de las funciones virtuales en llamadas directas e inline. Al fin y al cabo, las funciones virtuales suelen ser degeneradas.

Pero la verdadera sobrecarga está en las operaciones de referencia y en el control de los índices dinámicos. Tienen que ser controlados todo el tiempo.

 
Alexey Volchanskiy:

En relación con una tarea que requiere muchos recursos, ha surgido una pregunta: cuál es la sobrecarga de utilizar la POO en comparación con la programación procedimental convencional.

Por supuesto, las buenas características de la POO son costosas en recursos y en tiempo de depuración. La POO sólo tiene sentido como una envoltura de texto conveniente o en caso de uso mínimo en la inicialización del tiempo de ejecución... En realidad, la POO no era más que una cosa de marketing de Microsoft para aumentar los costes de las horas de trabajo de los programadores y estimular la compra de equipos más avanzados. Y ellos mismos no son tontos y escriben todo el software en C y ensamblador.

Razón de la queja: