Domande su OOP in MQL5 - pagina 10

 
Vasiliy Sokolov:

...Quale variante è usata in MQL è sconosciuta...

Non c'è un raccoglitore di rifiuti in MQL.
 
Vasiliy Sokolov:

Buon pomeriggio. La memoria del computer ha le stesse prestazioni indipendentemente dal fatto che sia usata in un contesto stack o heap. La gestione dinamica della memoria stessa dipende dall'implementazione del raccoglitore di rifiuti: per esempio, può essere il conteggio dei riferimenti come in Python (variante più lenta) o l'analisi delle epoche di generazione degli oggetti con l'attraversamento del grafico di esecuzione nel processo in background (Net CLR). Quale variante sia usata in MQL è sconosciuta, ma possiamo supporre che sia estremamente efficiente, perché l'utente di MQL5 ha accesso all'operatore di cancellazione direttamente, il che semplifica notevolmente il lavoro del GC stesso. Pertanto, le vostre preoccupazioni circa l'overhead quando si usa new sono infondate - sentitevi liberi di usare la memoria dinamica.

Per quanto riguarda lo "stack overflow", l'unico modo in cui si può incontrare questo caso nei sistemi moderni è quando si usa una ricorsione complessa o si fa un errore nell'algoritmo ricorsivo. Un programma moderno lavora sempre in modalità protetta OC nello spazio di indirizzi virtuale, con caricamento dinamico delle pagine di memoria, quindi non preoccupatevi: lo stack non traboccherà:)

Dichiarazione falsa.

 
Dmitry Fedoseev:
Non c'è un raccoglitore di rifiuti in MKL.

da dove viene l'informazione? su cosa è scritto MT4 / MT5? - qualche informazione?

;)

ZS: il massimo che è liberamente disponibile - offerte di lavoro da Metakvot, ci sono requisiti scritti per i programmatori ai candidati ;)

 
Igor Makanu:

da dove viene l'informazione? su cosa è scritto MT4 / MT5? - qualche informazione?

;)

ZS: il massimo che è liberamente disponibile - offerte di lavoro da Metakvot, ci sono requisiti scritti per i programmatori ai candidati ;)

Che differenza fa in cosa è scritto? In mql, gli oggetti creati con new non si cancellano da soli. A proposito, nemmeno in c++))

 
Dmitry Fedoseev:
Non c'è un raccoglitore di rifiuti in MKL.

Dimitri, ti sbagli. Ecco tre ragioni per cui MetaTrader ha un raccoglitore di spazzatura dopo tutto:

  1. MQL5 cancella automaticamente gli oggetti creati senza nuovo. I puntatori a tali oggetti sono di tipo AUTOMATICO. Possono essere cancellati automaticamente o dallo Spirito Santo, o dallo spazzino.
  2. Più di una volta gli sviluppatori hanno menzionato che il programma MQL5 è eseguito dalla macchina virtuale interna di MetaTrader. Se c'è una macchina virtuale, allora deve esserci anche il raccoglitore di rifiuti.
  3. Se un oggetto dinamico non è stato cancellato come richiesto dall'utente, MetaTrader lo indicherà con il messaggio 'leaked memmory' indicando quanti e quali oggetti non sono stati cancellati. Cioè, MetaTrader sa di fatto quanto e cosa è stato allocato - cioè è ovvio che c'è qualche sistema in esecuzione in parallelo che controlla la gestione della memoria, questo è il raccoglitore di spazzatura.
 
Dmitry Fedoseev:

Dichiarazione falsa.

P.S. Sei cambiato molto in questi anni, però. Sei diventato un po' dispettoso. Ricordo che offrivi molti suggerimenti costruttivi. Ora state costantemente bisticciando: argomenti / negazioni / denunce senza senso. A cosa serve tutto questo? Vuoi colpirmi più forte? - Ti darò una pietra io stesso: colpiscimi come vuoi, ma mi dispiace per te lo stesso.

 
Vasiliy Sokolov:

Dimitri, ti sbagli. Ecco tre ragioni per cui MetaTrader ha un raccoglitore di spazzatura dopo tutto:

  1. MQL5 cancella automaticamente gli oggetti creati senza nuovo. I puntatori a tali oggetti sono di tipo AUTOMATICO. Possono essere cancellati automaticamente o dallo Spirito Santo, o dallo spazzino.
  2. Più di una volta gli sviluppatori hanno menzionato che il programma MQL5 è eseguito dalla macchina virtuale interna di MetaTrader. Se c'è una macchina virtuale, allora deve esserci anche il raccoglitore di rifiuti.
  3. Se un oggetto dinamico non è stato cancellato come richiesto dall'utente, MetaTrader lo indicherà con il messaggio 'leaked memmory' indicando quanti e quali oggetti non sono stati cancellati. Così MetaTrader sa esattamente quanto e cosa è stato allocato - è ovvio che c'è qualche sistema in esecuzione in parallelo che controlla la gestione della memoria, questo è un collettore di spazzatura.

1. non lo spirito santo e non il raccoglitore di rifiuti.

2.3 Si può fantasticare all'infinito.

 
Vasiliy Sokolov:

Z.I. Sei cambiato molto nel corso degli anni. Sei diventato un po' amareggiato. Ricordo che offrivi molti suggerimenti costruttivi. Ora state costantemente bisticciando: solo argomenti / negazioni / denunce senza senso. A cosa serve tutto questo? Vuoi colpirmi più forte? - Ti darò una pietra io stesso: colpiscimi come vuoi, ma mi dispiace comunque per te.

Singhiozzando!

 
Dmitry Fedoseev:

1. né uno spirito santo né un raccoglitore di rifiuti.

2.3 L'immaginazione è infinita.

Leggiamo i documenti. Il nuovo operatore non restituisce un puntatore a un oggetto, ma un descrittore di oggetto. Mi permetto di suggerire che qualsiasi classe sia avvolta in qualche wrapper che uccide in modo sicuro l'oggetto dimenticato quando si minimizza il programma e allo stesso tempo indica gentilmente la presenza di perdite. In generale, questo meccanismo sarebbe meglio lasciarlo ai creatori per commentarlo.
 
Vladimir Simakov:
Leggiamo i documenti. Il nuovo operatore non restituisce un puntatore a un oggetto, ma un descrittore di oggetto. Oso suggerire che qualsiasi classe sia avvolta in qualche wrapper che uccide in modo sicuro l'oggetto dimenticato alla minimizzazione, allo stesso tempo indicando gentilmente le perdite esistenti. In generale, questo meccanismo sarebbe meglio lasciarlo ai creatori per commentarlo.

Sì, cancella e scrive un messaggio sulle perdite di memoria, solo perché i programmatori che scrivono gli EA non si annoino a morte.

È interessante come ieri c'era una perdita di memoria e oggi non ce ne può essere nemmeno una.

E a proposito di uccelli... i descrittori sono anche puntatori. E sapete, la parola stessa non cambia nulla, che sia un descrittore, un puntatore, un identificatore.

Motivazione: