Errori, bug, domande - pagina 2468

 
Alexey Navoykov:

Lo pseudo codice che hanno dato in questo thread qualche tempo fa, cercatelo. Per quanto mi ricordo, la capacità lì viene aumentata solo quando la dimensione dell'array supera questa capacità. Anche se qualcosa potrebbe essere cambiato naturalmente.

E la funzione per ottenere il valore di saracity è davvero molto necessaria.

Grazie per le informazioni, finora ho trovato come fxsaber stava cercando la stessa cosa )).

Forum sul trading, sistemi di trading automatico e test di strategia

Bug, bug, domande

fxsaber, 2018.04.13 10:04

Aiuta a trovare il post dello sviluppatore dove è stato pubblicato il codice sorgente di ArrayResize. Cercare su Google "site:mql5.com/it/forum ArrayResize+reserve" non aiuta.

Ricordo che c'era un codice sorgente. In esso si può vedere immediatamente la logica di implementazione del parametro di riserva.

Ho cercato su google, ho cercato sul forum, ho cercato nei profili dei principali sviluppatori...
Oltre alla possibilità di usare reserve_size con valore -1 in ArrayResize per cancellare la memoria precedentemente allocata, non ho trovato nulla.
 
Sergey Dzyublik:

Grazie per le informazioni, finora ho trovato come fxsaber stava cercando la stessa cosa ))

Nemmeno io l'ho trovato).

Credo che @Slava ne abbia scritto.

 

Forum sul trading, sistemi di trading automatico e test di strategie di trading

Bug, bug, domande

Ilyas, 2016.08.24 11:08

L'array ("dentro") memorizza l'allocazione - sotto quanti elementi è allocato l'array.

La logica per lavorare con le allocazioni (codice condizionale):
ArrayResize(arr,int size,int reserve)
  {
   if(arr.allocated<size)
      if(!ArrayAllocateMemory(arr,size+reserve))  // -> arr.allocated=size+reserve;
         return(-1);
   //---
   CallConstructorsOrDestructors(arr,size);
   //---
   arr.size=size;
   return(size);
  }

 
Alexey Navoykov:

Grazie per il vostro aiuto.
Sfortunatamente, questo codice non fornisce alcuna risposta alle domande in questione.

 
class A{
   uchar data;
};
 
template<typename T>
class B{
public:
   T data;
};

template<typename T>
class C {
public:
   uchar data;
};


void OnStart(){
   A a;
   B<A> b;
   C<A> c;
   
   a = (A)(a);
   b = (B<A>)(b);    //'(' - invalid cast operation
   c = (C<A>)(c);    //code generation error            
}
Non tutti i tipi di dati possono eseguire un type cast "in sé", a quanto pare...
Le classi template si rompono in fase di compilazione, ma le strutture sono ok.
 
Potete tirare fuori la riserva con i ganci sporchi e controllare il comportamento di ridimensionamento con le maniglie
 
TheXpert:
Potete ottenere la riserva con i ganci sporchi e controllare il comportamento di ridimensionamento con le maniglie

Presumibilmente, nella memoria dell'oggetto array, la variabile sotto dimensione riservata si trova accanto alla variabile sotto dimensione.
Ma al momento ci sono dieci compiti più urgenti del debugging o di scavare nella memoria di MT per studiare l'effetto di ArrayResize sul campo di dimensione riservato dell'oggetto array.

 
Sergey Dzyublik:
#import "msvcrt.dll"
  long memcpy(int &dst[], long &src, int cnt);
#import

struct ArrayStore
{
   long offset;
   double x[];
   
   int capacity() 
   {
      int ints[sizeof(ArrayStore) / sizeof(int)];
      memcpy(ints, this.offset, sizeof(ArrayStore));
      return ints[8];
   }
};

void OnStart()
{
   ArrayStore store;
   ArrayResize(store.x, 17, 8755);
   Print("all reserved size = ", store.capacity()); // 8772
}
 
Sergey Dzyublik:
Non tutti i tipi di dati possono eseguire un type cast "in sé", a quanto pare...
Le classi template si rompono in fase di compilazione, ma le strutture sono ok.

Grazie per il messaggio.

È un rudimento, lo sistemeremo.

 
TheXpert:

Grazie, non avevo pensato all'accesso di WinApi alla memoria del processo.

P.s. Il messaggio personale è chiuso, quindi scrivo qui:
"Nel reverse engineering, il termine hook ha un significato specifico - codice per intercettare l'invocazione di una funzione o di un evento".