Fehler, Irrtümer, Fragen - Seite 2468

 
Alexey Navoykov:

Soweit ich mich erinnere, wird die Kapazität dort nur erhöht, wenn die Array-Größe diese Kapazität übersteigt. Obwohl sich natürlich etwas geändert haben könnte.

Und die Funktion zur Ermittlung des Wertes von saracity ist wirklich sehr notwendig.

Vielen Dank für die Informationen, so weit ich gefunden, wie fxsaber war für die gleiche Sache suchen )).

Forum zum Thema Handel, automatisierte Handelssysteme und Strategietests

Wanzen, Wanzen, Fragen

fxsaber, 2018.04.13 10:04

Helfen Sie, den Entwicklerbeitrag zu finden, in dem der ArrayResize-Quellcode veröffentlicht wurde. Googeln nach "site:mql5.com/de/forum ArrayResize+reserve" hilft nicht weiter.

Ich erinnere mich, dass es einen Quellcode gab. Darin können Sie die Logik der Implementierung des Reserve-Parameters sofort erkennen.

Ich habe bei Google gesucht, ich habe im Forum gesucht, ich habe in den Profilen der Hauptentwickler gesucht...
Außer der Möglichkeit, reserve_size mit dem Wert -1 in ArrayResize zu verwenden, um zuvor zugewiesenen Speicher zu löschen, habe ich nichts gefunden.
 
Sergey Dzyublik:

Vielen Dank für die Informationen, so weit ich gefunden, wie fxsaber war auf der Suche nach der gleichen Sache ))

Ich habe es auch nicht gefunden.)

Ich glaube, @Slava hat darüber geschrieben.

 

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Wanzen, Wanzen, Fragen

Ilyas, 2016.08.24 11:08

Das Array ("inside") speichert die zugewiesenen - unter wie vielen Elementen das Array zugewiesen ist.

Die Logik für die Arbeit mit zugewiesenem (bedingtem) Code:
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:

Ich danke Ihnen für Ihre Hilfe.
Leider gibt dieser Code keine Antworten auf die gestellten Fragen.

 
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            
}
Nicht alle Datentypen können einen Typ-Cast "an sich" durchführen, wie sich herausstellt...
Schablonenklassen gehen beim Kompilieren kaputt, aber Strukturen sind OK.
 
Sie können die Reserve mit schmutzigen Haken herausziehen und das Größenänderungsverhalten mit den Griffen überprüfen
 
TheXpert:
Sie können die Reserve mit Dirty Hooks erhalten und das Größenänderungsverhalten mit Handles überprüfen

Vermutlich liegt im Speicher des Array-Objekts die Variable unter reserved size neben der Variable unter size.
Aber im Moment gibt es zehn dringendere Aufgaben als das Debuggen oder das Wühlen im Speicher von MT, um die Auswirkungen von ArrayResize auf das reservierte Größenfeld des Array-Objekts zu untersuchen.

 
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:
Nicht alle Datentypen können einen Typ-Cast "an sich" durchführen, wie sich herausstellt...
Schablonenklassen gehen beim Kompilieren kaputt, aber Strukturen sind OK.

Vielen Dank für die Nachricht.

Das ist nur rudimentär, das kriegen wir schon hin.

 
TheXpert:

Danke, ich habe nicht daran gedacht, dass WinApi auf den Prozessspeicher zugreift.

P.s. Persönliche Nachricht ist geschlossen, also schreibe ich hier:
"Im Reverse Engineering hat der Begriff Hook eine bestimmte Bedeutung - Code zum Abfangen des Aufrufs einer Funktion oder eines Ereignisses.