Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
OK. Non capisco. Hai capito? Sei sicuro di aver capito? Esattamente?
L'argomento si riduce alla seguente affermazione:
...
Non si trattava di un argomento generale, ma di una situazione riguardante un singolo post, e ho spiegato qual era il problema. Ok, non c'è stata nessuna catastrofe.
Array dichiarato doppio x[268435448];
Lo stesso array nella funzione OnStart().
Ha anche fatto una chiamata ricorsiva con profondità LONG_MAX.
Nessun problema.
Non usate gli array statici?
Se la dimensione dell'array è piccola, costante e nota in anticipo, la statica è migliore e probabilmente più veloce.
Se la dimensione dell'array è piccola, costante e nota in anticipo, la statica è migliore e probabilmente più veloce.
Mi piacerebbe avere un modo per ottenere una lista di variabili/array statici e le loro dimensioni. Probabilmente c'è bisogno di un parser di codice come fatto qui.
Immagino che l'array statico di stringhe e l'array doppio siano cose molto diverse.
Immagino che la stringa statica e la doppia stringa siano cose molto diverse.
la stringa è essenzialmente una classe interna composta da un puntatore e una dimensione int, cioè per l'array doppio occuperà condizionatamente 1,5 volte meno spazio
Non credo che abbia molto senso preoccuparsene, a meno che non si abbiano array statici con milioni di elementi.
Non usare gli array statici?
Quindi ci sono essenzialmente quattro tipi di dati in MQL:
Se lasciamo lo stack alle funzioni e alle loro variabili locali, ci rimangono tre tipi con cui lavorare. Personalmente credo (e questa è solo la mia opinione) che i dati definiti con durata automatica combinino bene i vantaggi dei due tipi precedenti, senza i loro svantaggi. I dati definiti con il puntatore automatico sono prevedibili e sicuri come quelli statici, ma altrettanto flessibili come quelli dinamici, controllati manualmente. Per prevedibilità intendo in scenari in cui non c'è bisogno di fare ulteriori controlli dei bit del puntatore e chiedersi se qualcun altro ha già cancellato i dati prima. Per flessibilità intendo scenari in cui si può lavorare con i dati referenziati da un puntatore automatico come con un puntatore regolare, passando il puntatore a una funzione o, per gli array, riciclandolo.
Per illustrare ciò che ho appena detto, potete confrontare il codice iniziale fornito da Ihor Herasko e lo stesso codice che ho scritto per POINTER_AUTOMATIC. Non ci sono controlli e inizializzazioni extra, nessun operatore cancella 60 000 000 di volte. Tutto questo vi fa risparmiare tempo, fatica e, cosa altrettanto importante, risorse. Se lo capite, non avete quasi mai bisogno di lavorare con i puntatori. Si può sempre scrivere un algoritmo del genere che minimizzi questo lavoro o che rimanga del tutto. Per esempio, non gestisco mai gli oggetti manualmente nel mio codice - non ce n'è proprio bisogno in qualche modo. Per quanto riguarda gli array statici, allora a volte devo usare, per esempio, per cucire nel programma i dati di cui ha bisogno, ma sono cose così speciali, che gli utenti comuni, presumo, non ne hanno bisogno. È meglio usare collezioni già pronte come CArrayObj, o le proprie. Ora i modelli e le capacità MQL permettono di creare cose abbastanza flessibili che sono molto meglio degli array statici.
Vasiliy Sokolov #:
Dati statici e predefiniti. Cucito nel programma al momento della compilazione e non più modificato. Sono memorizzati in un'area di memoria privata. Per esempio, questi sono array statici del tipo char[1024].
Se l'array non è inizializzato,
perché dovrebbe essere scritto in EX5?
Se l'array non è inizializzato,
perché dovrebbe essere cucito in EX5?
Sì, è vero, quelli non inizializzati non sono cuciti, ovviamente. Quelli inizializzati saranno cuciti. Ma le dimensioni di entrambi i tipi sono definite al momento della compilazione e non cambiano più. Cioè, gli array statici possono essere condizionatamente divisi in due gruppi.
Non c'è un raccoglitore di rifiuti in emcool.
Ufficialmente, sì. Non ufficialmente, molte cose indicano che esiste: