Hilfe bei OOP - Seite 5

 

Ich muss hier auch etwas schreiben...

Ich habe so etwas in meinem Code:

   union u_Data_t
     {
      T value;
      ulong data[sizeof(T)/8+1];
     } data_t;

T ist vom Typ int.

Ausführungszeit der Funktion 10*1024*1024 Mal unter Debugging: 214,659 Millisekunden.

Ohne Fehlersuche: 13190,941 Millisekunden

Hier liegt kein Fehler vor, die Release-Version ist viel langsamer.

Ändern wir die Variablendeklaration ein wenig:

   static union u_Data_t
     {
      T value;
      ulong data[sizeof(T)/8+1];
     } data_t;

Sie erscheint statisch.

Unter Fehlersuche: 213,045 Millisekunden.

Ohne: 70,237Millisekunden

 
Vasiliy Sokolov #:
Dmitry, entschuldige bitte, kennst du noch eine andere Programmiersprache als Mukl? Nein, das müssen Sie nicht. Und Sie haben immer noch nicht gelernt, wie man mit Objekten und Zeigern arbeitet, das geht aus den wenigen Codes und sogar Artikeln hervor, die Sie veröffentlicht haben. Deshalb kann ich nicht einmal ernsthaft auf diesen talentlosen und offen gesagt dummen Kommentar antworten. Lesen Sie endlich wikipedia, lernen Sie, was eine Müllabfuhr ist und wie sie organisiert ist, und lesen Sie wenigstens einmal, worauf Sie sich beziehen wollen. Bislang sieht das alles aus wie ein Hund, der eine Karawane anbellt: sinnlos und gnadenlos.

Kümmern Sie sich zuerst um Ihre eigenen Kakerlaken. Das ist lustig, du bist zu unzulänglich. Und so bescheiden bin ich))

Sie können nichts ernsthaft beantworten, weil Sie überhaupt nichts ernsthaft beantworten können, weil Sie schlammig sind.

Wassili, du bist wirklich unzulänglich. Schließlich ist das Gerede über die Müllabfuhr schon ein Jahr her, wenn nicht länger. Es ist immer noch da,

Sie haben in einem Jahr nicht herausgefunden, was es ist. Ich meine, ich weiß nicht, ob Sie eine Ahnung haben, was es ist, aber Sie haben hier demonstriert

dass Sie ganz banal das Thema des Gesprächs nicht verstehen und sich selbst widersprechen. Und das Erstaunliche daran ist, dass Sie anscheinend zumindest wissen

zwei Sprachen, eine davon mit einer Müllabfuhr, und trotzdem kennen Sie nicht den Unterschied zwischen einer Sprache mit einer Müllabfuhr

und eine Sprache ohne Müllabfuhr.

Und Antwort auf Ihre Worte - zeigen Sie mir, dass ich nicht weiß, wie man mit Objekten und Zeigern arbeitet?

 
Aliaksandr Hryshyn #:

die Release-Version ist deutlich langsamer.

Ist der Code für die Wiedergabe bereit?

 
fxsaber #:

Fertiger Code zum Spielen?

//+------------------------------------------------------------------+
//|                                                        cBool.mqh |
//|                                               Aliaksandr Hryshyn |
//|                          https://www.mql5.com/ru/users/greshnik1 |
//+------------------------------------------------------------------+
#property copyright "Aliaksandr Hryshyn"
#property link      "https://www.mql5.com/ru/users/greshnik1"

//Битовый поток
class cBit_thread
  {
private:
   ulong             _bit_thread[];//Битовый поток данных
   uint              _bit_thread_size;//Количество записанных бит в потоке
   uint              _bit_thread_pos;//Текущя позиция для чтения/записи
public:
   //Запись последовательности бит
   //Размер увеличивается динамически
   template<typename T>
   int               Write(
      const T value,//Простая структура или переменная
      uint pos_bit_read=0,//С какой позиции начать считывание из структуры/переменной.Указывается в битах
      int bits_count=-1//Количество бит. -1=все до конца
   );//Возвращает количество записанных бит -1=ошибка
  };

template<typename T>
int cBit_thread::Write(const T value,uint pos_bit_read=0,int bits_count=-1)
  {
   static union u_Data_t
     {
      T value;
      ulong data[sizeof(T)/8+1];
     } data_t;
   ZeroMemory(data_t.data);
   data_t.value=value;

   if(pos_bit_read>=sizeof(T)*8)
      return -1;
   if(bits_count<0)
      bits_count=int(sizeof(T)*8-pos_bit_read);
   else
      if(pos_bit_read+bits_count>sizeof(T)*8)
         return -1;

   uint shift=int(pos_bit_read&63);
   int read_from=int(pos_bit_read>>6);

   int read_end=int(pos_bit_read+bits_count);
   uint write_to=0;
   ulong l1=0;
   for(int i1=read_from; i1<(read_end>>6)+1; i1++,write_to++)
     {
      l1=data_t.data[i1];
      data_t.data[write_to]=l1>>shift;
      if(write_to>0)
         data_t.data[write_to-1]|=l1<<(64-shift);
     }

   uint len1=ArrayRange(_bit_thread,0);
   uint len2b=_bit_thread_pos+bits_count;
   if(len2b+128>(len1<<6))
     {
      len2b=(len2b>>6)+2;
      ArrayResize(_bit_thread,len2b+1024);
      len2b+=1024;
      for(uint i1=len1; i1<len2b; i1++)
         _bit_thread[i1]=0;
     }
   int pos_end=(bits_count>>6)+((bits_count&63)!=0);
   shift=_bit_thread_pos&63;
   write_to=(_bit_thread_pos>>6);
   if(shift==0)
     {
      for(int i1=0; i1<pos_end; i1++)
        {
         l1=data_t.data[i1];
         _bit_thread[write_to]|=l1;
        }
     }
   else
     {
      for(int i1=0; i1<pos_end; i1++)
        {
         l1=data_t.data[i1];
         _bit_thread[write_to]|=(l1<<shift);
         _bit_thread[write_to+1]|=l1>>(64-shift);
        }
     }
   _bit_thread_pos+=bits_count;
   _bit_thread_size=MathMax(_bit_thread_size,_bit_thread_pos);
   return bits_count;
  }
//+------------------------------------------------------------------+

Und ein Drehbuch:

#include <cBool.mqh>
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   cBit_thread thread;
   ulong mcs=GetMicrosecondCount();
   int num=1;
   for(int i1=0; i1<10*1024*1024; i1++)
     {
      thread.Write(num,0,1);
     }
   Print((GetMicrosecondCount()-mcs)/1000.0);
  }
 
Hat dies jemand getan?
 
Aliaksandr Hryshyn #:

Und das Drehbuch:

Release: 81.003
Debug: 295.312

Ich sehe das Problem nicht.

 
fxsaber #:

Ich sehe das Problem nicht.

Letzte Beta 3062

 
Meine 229 und 225 sind genau gleich.
 
Dmitry Fedoseev #:
Ich habe 229 und 225 - genau dasselbe.

Ist die Terminalversion dieselbe?

 
Aliaksandr Hryshyn #:

Ist die Terminalversion dieselbe?

3061