Errori, bug, domande - pagina 1336

 

È l'intero problema a causa dei 24 byte? Scusa, stai cercando di scrivere software MT su una calcolatrice :) ?

Naturalmente, mi scuso, ma succhiando il problema dalle dita, stai bloccando le domande degli altri, che raramente vengono notate dai rappresentanti degli sviluppatori.

 
Alexey Navoykov:

Allora, perché il distruttore non è ottimizzato? Dobbiamo memorizzare 8 byte extra solo per questo...

Beh, non so proprio come sia implementato lì. Per esempio, se avete un array di oggetti:

I riferimenti (puntatori) per ogni elemento sono memorizzati nel sistema?

Ma non puoi prendere un puntatore a una struttura e questo riduce la convenienza di usarla. Ecco perché a volte devi fare una scelta dolorosa... Se riesci a ridurre la dimensione della classe, sarebbe meraviglioso. E se hai anche un puntatore alla struttura, tutto andrà bene).

Create oggetti dinamicamente, con l'operatore new, e non dovrete affatto creare oggetti vuoti.

La struttura non può essere referenziata da un puntatore, ma la struttura può essere passata per riferimento, per esempio: OrderSend(MqlTradeRequest& request, MqlTradeResult& result) - nella maggior parte dei casi, questo è sufficiente.

 
Konstantin Karpov:

È l'intero problema a causa dei 24 byte? Scusa, stai cercando di scrivere software MT su una calcolatrice :) ?

Naturalmente, mi scuso, ma succhiando il problema dalle dita, stai bloccando le domande degli altri, che raramente vengono notate dai rappresentanti degli sviluppatori.

Imparate cosa sono gli array, tanto per cominciare.
 
Alexey Navoykov:
Faresti meglio a studiare gli array, tanto per cominciare.

Beh, li ho studiati qualche anno fa :) se metti gli oggetti di classe in un array, poi crei una lista di puntatori e crei oggetti di classe nell'"heap", ti hanno giustamente parlato del nuovo operatore...

Tutti i dati che ho sono molto grandi e sono originariamente gestiti da oggetti di classe, situati nell'"heap". Il mio PC ha 8 giga di memoria e posso usare totalmente questa memoria, anche una volta che ho fatto un errore nell'algoritmo e la memoria è fuoriuscita, la memoria era intasata al 95% e poi il sistema operativo ha iniziato a pulire tutto da solo.

Quindi è meglio non fare il ragazzo offeso, ma guardare attraverso tutte le caratteristiche della lingua e ci riuscirai :)

 
Vasiliy Sokolov:

Create oggetti dinamicamente usando l'operatore new, e non dovrete affatto creare oggetti vuoti.

La struttura non può essere referenziata da un puntatore, ma la struttura può essere passata per riferimento, per esempio: OrderSend(MqlTradeRequest& request, MqlTradeResult& result) - nella grande maggioranza dei casi questo è sufficiente.

Che senso ha questo consiglio? Sembra che tu abbia letto solo una riga e abbia scritto qualcosa il prima possibile. Stiamo parlando della dimensione della classe. Questa dimensione non dipende da come l'oggetto viene creato, staticamente o dinamicamente. E "creare oggetti vuoti" - non capisco cosa voglia dire. E passare argomenti nelle funzioni è assolutamente fuori luogo anche qui. Pensi che siamo dei bambini che non sanno come si passano gli oggetti nelle funzioni?

 
Konstantin Karpov:

Beh, li ho studiati qualche anno fa :) se metti gli oggetti di classe in un array, poi crei una lista di puntatori e crei oggetti di classe in un "heap", sei stato correttamente consigliato sull'operatore new...

Tutti i dati che ho sono molto grandi e sono originariamente gestiti da oggetti di classe, situati nell'"heap". Il mio PC ha 8 giga di memoria e posso usare totalmente questa memoria, anche una volta che ho fatto un errore nell'algoritmo e la memoria è fuoriuscita, la memoria era intasata al 95% e poi il sistema operativo ha iniziato a pulire tutto da solo.

Quindi, è meglio non fare il ragazzo offeso, ma guardare attraverso tutte le possibilità della lingua e si ottiene tutto :)

Un altro ragazzo intelligente... Ha iniziato con le calcolatrici e ora non gli interessano gli 8 giga. A proposito di puntatori e heap - che senso ha la tua brillante conoscenza? Qualcuno qui ha mai chiesto cosa sono i puntatori? O è solo una chiacchierata per la vita?

In generale, ragazzi, vi prego di chiedere in modo convincente di postare in qualche altro thread, per favore, nessuno ha chiesto i vostri consigli qui. Il dialogo è specificamente con lo sviluppatore.

 
Alexey Navoykov:

Che senso ha questo consiglio? È come se tu l'avessi letto da una riga e non vedessi l'ora di scrivere qualcosa. Stiamo parlando della dimensione della classe. Questa dimensione non dipende da come l'oggetto viene creato, staticamente o dinamicamente. E "creare oggetti vuoti" - non capisco cosa voglia dire. E passare argomenti nelle funzioni è assolutamente fuori luogo anche qui. Pensi che siamo dei bambini che non sanno come si passano gli oggetti nelle funzioni?

Senti, intelligentone, vai a imparare prima le basi della programmazione in ambienti gestiti dalla memoria: ti è stato chiaramente risposto che una classe, anche se vuota, contiene certi metadati. La loro dimensione e organizzazione è ottimale. Chi sei tu per insegnare agli sviluppatori come scrivere un compilatore e memorizzare i dati correttamente? Se volete risparmiare qualche byte, andate a costruire la vostra bicicletta in C o Assembler.

Ci sono un sacco di ragazzi intelligenti che leggono "C for Beginners" e poi ti danno consigli.

 
Alexey Navoykov:

Un altro ragazzo intelligente... Ha iniziato con la calcolatrice, ora non gli importa di 8 giga. A proposito di puntatori e heap - perché questa tua brillante conoscenza? Qualcuno qui ha chiesto cosa sono i puntatori? O è solo una chiacchierata per la vita?

In generale, ragazzi, convintamente vi chiedo di inondare in qualche altro thread, per favore, nessuno ha chiesto il vostro consiglio qui. Il dialogo è specificamente con lo sviluppatore.

A giudicare dalle vostre dichiarazioni, lavorate con array di oggetti di classe, che sono così numerosi che la loro sola dimensione riempie la memoria del terminale, che deve essere terribilmente lento, altrimenti non avreste sollevato questa questione. Penso che tu abbia scelto strategicamente un approccio sbagliato per lavorare con i tuoi dati e ti sono stati dati molti consigli in proposito:

- allocate la memoria per i vostri oggetti nell'"heap" e la memoria del terminale non sarà intasata

- non tenere grandi quantità di informazioni in memoria e caricare i dati su disco per salvarli da perdite accidentali in caso di crash - si può anche caricare programmaticamente se necessario

E aggravarsi con i consigli non ne vale la pena, se si vuole comunicare solo con lo sviluppatore, c'è un servizio Desk, ma ci sono molte persone qui :)

 
Renat Fatkhullin:
Ho una domanda - quanta memoria viene allocata dal terminale (MT4, MT5x86 e MT5x64) per gli EAs?
 

Gli sviluppatori non sono privi di umorismo.

Mi suona come un download, e una specie di albero "Download" che oscilla a destra o a sinistra.

Motivazione: