OOPに関するヘルプ - ページ 5

 

ここにも何か書かないと...。

私のコードにはそのようなものがあります。

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

Tはint型です。

デバッグ中の関数10*1024*1024回の実行時間: 214.659ミリ秒。

デバッグなし:13190.941ミリ秒

ここにエラーはなく、リリース版はもっと遅いです。

変数の宣言を 少し変えてみましょう。

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

静止して見える。

デバッギング中213.045ミリ秒

なし:70.237ミリ秒

 
Vasiliy Sokolov #:
ドミトリー、失礼ですが、ムックル以外のプログラミング言語をご存知ですか?いいえ、そんなことはありません。そして、あなたはまだオブジェクトやポインタの扱い方を学んでいない。あなたが公開した数少ないコードや記事からもそれは明らかです。だから、この才能のない、はっきり言ってバカなコメントには、まともに返信もできないのです。最後にwikipediaを読み、ゴミ収集車が何であるか、どのように整理されているかを学び、最後にあなたが参照しようとしているものを少なくとも一度は読んでください。今 のところ、すべてはキャラバンに吠える犬のように見えます:無分別で無慈悲な

まずは自分のゴキブリをどうにかしてください。おかしいだろ、不備がありすぎるだろ。と控えめに言っている私です))

何一つまともに答えられないのは、泥臭いからだろ。

ヴァシリー 本当に不十分なんですね。何しろ、このゴミ収集人の話は、1年前、いやもっと前だ。まだあるんだ。

1年経ってもわからない。つまり、そんなに科学的なものは得られないのですが、あなたはここで実証しました。

を理解してないって、バンバン話題にして、矛盾してるじゃん。そして、驚くべきは、あなたが少なくとも知っているようだということです。

二カ国語、片方はゴミ箱付き、それでもゴミ箱付き言語の違いが分からないというのは

とゴミ収集人のいない言語。

そして、あなたの言葉に対する答え - 私がオブジェクトとポインタの扱い方を知らないということを教えてください。

 
Aliaksandr Hryshyn #:

リリース版では大幅に遅くなっています。

再生用コードの準備はできましたか?

 
fxsaber #:

プレイするための既成のコード?

//+------------------------------------------------------------------+
//|                                                        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;
  }
//+------------------------------------------------------------------+

そして台本。

#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);
  }
 
やったことある人いる?
 
Aliaksandr Hryshyn #:

そして、脚本。

Release: 81.003
Debug: 295.312

問題がわからない。

 
fxsaber #:

問題がわからない。

最新ベータ版 3062

 
私の229と225は全く同じです。
 
Dmitry Fedoseev #:
私は229と225を持っていますが、全く同じです。

端末のバージョンは同じですか?

 
Aliaksandr Hryshyn #:

端末のバージョンは同じですか?

3061