Preguntas sobre POO en MQL5 - página 10

 
Vasiliy Sokolov:

...Se desconoce qué variante se utiliza en MQL...

En MQL no hay ningún recolector de basura.
 
Vasiliy Sokolov:

Buenas tardes. La memoria del ordenador tiene el mismo rendimiento independientemente de si se utiliza en un contexto de pila o de montón. La gestión de la memoria dinámica en sí misma depende de la implementación del recolector de basura: por ejemplo, puede ser el recuento de referencias como en Python (versión más lenta) o el análisis de las épocas de generación de objetos con el recorrido del gráfico de ejecución en el proceso de fondo (Net CLR). Se desconoce qué variante se utiliza en MQL, pero podemos suponer que es extremadamente eficiente, porque el usuario de MQL5 tiene el operador de borrado directamente disponible, lo que simplifica enormemente el trabajo de la propia GC. Por lo tanto, su preocupación por la sobrecarga al usar new es infundada - siéntase libre de usar la memoria dinámica.

En cuanto al "desbordamiento de la pila", la única forma de encontrar este caso en los sistemas modernos es cuando se utiliza una recursión compleja o se comete un error en el algoritmo recursivo. Un programa moderno siempre trabaja en modo protegido por OC en el espacio de direcciones virtual, con carga dinámica de páginas de memoria, así que no te preocupes: la pila no se desbordará:)

Declaración falsa.

 
Dmitry Fedoseev:
En MKL no hay recolectores de basura.

¿de dónde es la información? ¿en qué está escrito MT4 / MT5? - ¿alguna información?

;)

ZS: el máximo que está disponible libremente - ofertas de trabajo de Metakvot, hay requisitos escritos para los programadores a los solicitantes ;)

 
Igor Makanu:

¿de dónde es la información? ¿en qué está escrito MT4 / MT5? - ¿alguna información?

;)

ZS: el máximo que está disponible libremente - ofertas de trabajo de Metakvot, hay requisitos escritos para los programadores a los solicitantes ;)

¿Qué más da en qué esté escrito? En mql, los objetos creados con new no se borran solos. Por cierto, tampoco en c++))

 
Dmitry Fedoseev:
En MKL no hay recolectores de basura.

Dimitri, te equivocas. Aquí hay tres razones por las que MetaTrader tiene un recolector de basura después de todo:

  1. MQL5 borra automáticamente los objetos creados sin novedad. Los punteros a estos objetos tienen el tipo AUTOMÁTICO. Pueden ser borrados automáticamente por el Espíritu Santo, o por el recolector de basura.
  2. Más de una vez los desarrolladores han mencionado que el programa MQL5 es ejecutado por la máquina virtual interna de MetaTrader. Si existe una máquina virtual, también debe existir el recolector de basura.
  3. Si un objeto dinámico no ha sido borrado como lo requiere el usuario, MetaTrader lo indicará con un mensaje de "memoria filtrada" indicando cuántos y cuáles objetos no han sido borrados. Es decir, MetaTrader sabe de hecho cuánto y qué se ha asignado - es decir, es obvio que hay algún sistema que se ejecuta en paralelo que controla el manejo de la memoria, este es el colector de basura.
 
Dmitry Fedoseev:

Declaración falsa.

P.D. Sin embargo, has cambiado mucho con los años. Te has vuelto un poco rencoroso. Recuerdo que solías ofrecer muchas sugerencias constructivas. Ahora estáis constantemente discutiendo: argumentos / negaciones / denuncias sin sentido. ¿Para qué sirve todo esto? ¿Quieres golpearme más fuerte? - Yo mismo te voy a dar una piedra: pégame como quieras, pero me da pena igual.

 
Vasiliy Sokolov:

Dimitri, te equivocas. Aquí hay tres razones por las que MetaTrader tiene un recolector de basura después de todo:

  1. MQL5 elimina automáticamente los objetos creados sin novedad. Los punteros a estos objetos tienen el tipo AUTOMÁTICO. Pueden ser borrados automáticamente por el Espíritu Santo, o por el recolector de basura.
  2. Más de una vez los desarrolladores han mencionado que el programa MQL5 es ejecutado por la máquina virtual interna de MetaTrader. Si existe una máquina virtual, también debe existir el recolector de basura.
  3. Si un objeto dinámico no ha sido borrado como lo requiere el usuario, MetaTrader lo indicará con un mensaje de "memoria filtrada" indicando cuántos y cuáles objetos no han sido borrados. Así que MetaTrader sabe exactamente cuánto y qué se ha asignado - es obvio que hay algún sistema que se ejecuta en paralelo que controla el manejo de la memoria, este es un colector de basura.

1. no el espíritu santo y no el recolector de basura.

2.3 Puedes fantasear sin parar.

 
Vasiliy Sokolov:

Z.I. Has cambiado mucho con los años. Te has vuelto un poco amargado. Recuerdo que solías ofrecer muchas sugerencias constructivas. Ahora estáis constantemente discutiendo: sólo discusiones / negaciones / denuncias sin sentido. ¿Para qué sirve todo esto? ¿Quieres golpearme más fuerte? - Yo mismo te daré una piedra: pégame como quieras, pero me das pena de todos modos.

¡Sobrando!

 
Dmitry Fedoseev:

1. ni un espíritu santo ni un recolector de basura.

2.3 La imaginación es infinita.

Leamos los documentos. El operador new no devuelve un puntero a un objeto, sino un descriptor de objeto. Me atrevo a sugerir que cualquier clase esté envuelta en algún wrapper que mate de forma segura el objeto olvidado al minimizar el programa y al mismo tiempo indique amablemente la presencia de fugas. En general, sería mejor que los creadores comentaran este mecanismo.
 
Vladimir Simakov:
Leamos los documentos. El operador new no devuelve un puntero a un objeto, sino un descriptor de objeto. Me atrevo a sugerir que cualquier clase esté envuelta en alguna envoltura que mate de forma segura al objeto olvidado en la minimización, al mismo tiempo que señala amablemente las fugas existentes. En general, sería mejor que los creadores comentaran este mecanismo.

Sí, borra y escribe un mensaje sobre las fugas de memoria, sólo para que los programadores que escriben EAs no se aburran de su vida.

Es interesante como ayer había una fuga de memoria y hoy no puede haberla.

Y hablando de pájaros... los descriptores también son punteros. Y ya sabes, la palabra en sí no cambia nada, ya sea un descriptor, un puntero, un identificador.