defineの専門家に質問 - ページ 11

 
Igor Makanu:

CPUコマンドの中で物理的に存在する場合、no

配列はメモリ領域であり、配列要素へのアクセスは、このメモリ領域の先頭から要素のインデックスを計算し、格納されている型に応じたデータ(バイト)を取り出すことである。


これがアルゴリズムのロジックであれば、そうです - これらはインデックス可能な変数です。

一般に、研究中の問題については、唯一の正しい助言は、https://www.mql5.com/ru/forum/354662/page4#comment_19039624。

     {
      for(int i=0; i<ArraySize(mas); i++)
        {  
        r2+=ArraySize(mas);
        r2|=ArraySize(mas); 
        }

     }  
   ulong t2=GetMicrosecondCount();
   //for(ulong z=0; z<max; z++)
   int sizem=ArraySize(mas);
     {
      for(int i=0; i<sizem; i++)
        { 
        r2+=sizem;
        if (r2>10) r2|=sizem; 
        }
     } 

二項演算の実行時間は、if文の実行時間より何倍も速い(はず).裏側はクリーンなコードか超高速なネイティブコードのようだ

上段の時間は下段の時間の半分です。


まあ厳密には2つの変数を比較していたのですが))

 
Alexandr Andreev:

二項演算の実行時間は、if文の実行時間より何倍も速い(はず).

ループの中にif()を入れてはいけない、以前はCXレジスタでループが実行されていた。

Alexandr Andreev:

上段の時間は下段の時間の半分です

私は議論していない、私は午前中に再びテストしていた、時間の最適化は、MQL5で常に動作します、結果はループの数に依存し、よくどのテストが最初に呼ばれた - 私は再びそれをテストしません、それは時間の無駄です。

 
Igor Makanu:

ループの中にif()を入れてはいけない、以前はCXケースでループが実行されていた

私は議論していない、私は午前中に再びテストしていた、時間の最適化は、MQL5で常に動作します、結果はループの数に依存します、まあ、どのテストが最初に呼ばれた、私は再びそれをテストしません、それは時間の無駄です

....あなたは自分の投稿を見る必要があります))) 上の投稿は、ArraySize 演算子がオーバーランをチェックすることを示唆した投稿を指しており(THISはあなたのif)、本当にチェックするのはbodyに追加することであり、これが唯一の正しい方法であることを意味しています。

そして、最初のものを実行したときとの違いは、あなたのテストの中だけです)

 
Alexandr Andreev:

そして、最初のものを実行するのと違うのは、あなたのテストだけです)

テスト、見せてください。

とはいえ必要ない、私はオートマティズムの議論に参加している、あなたはそれが好きだ、私はループの終了条件でArraySize()を使用 することについて異なる意見を持っている

 

.ex5次元

void OnStart() // размер 12 272 байт
{
   int arr[];
   ArrayResize(arr, 100);
   ArrayInitialize(arr, 1);
   int sum = 0;
   for(int i = ArraySize(arr) - 1; i >= 0; i--)
   {
      sum += arr[i];
   }
   printf("sum = %i", sum);//sum = 100
}
//+------------------------------------------------------------------+
void OnStart() // размер 11 860 байт
{
   int arr[];
   ArrayResize(arr, 100);
   ArrayInitialize(arr, 1);
   int sum = 0;
   for(int i = 0; i < ArraySize(arr) - 1; i++)
   {
      sum += arr[i];
   }
   printf("sum = %i", sum);//sum = 100
}
//+------------------------------------------------------------------+
void OnStart() // размер  12 174 байт
{
   int arr[];
   ArrayResize(arr, 100);
   ArrayInitialize(arr, 1);
   int sum = 0;
   for(int i = 0, sz = ArraySize(arr); i < sz; i++)
   {
      sum += arr[i];
   }
   printf("sum = %i", sum);//sum = 100
}
 
コンパイラーメーカー以外に誰が知っているのか?ArraySize() は変数参照と同じように機能するのかもしれませんね。可能だと思われます。
 
Dmitry Fedoseev:
そして、誰が知っているかというと、コンパイラの制作者たちです。ArraySize()は、変数のアドレス指定と同じように動作するのかもしれませんね。可能だと思われます。
void OnStart()
  {
   int mas[];  
   int size=1000000000;
   ArrayResize(mas,size); 
   int r2=0; 
   int tr=0;  
    int num_steps=ArraySize(mas); 
    double step = 1.0/(double)num_steps;
    
     int v=size;
    ulong t1 = GetMicrosecondCount();
    
  // for(ulong z=0; z<max; z++)
  
   int sizem=Size(mas);
     {
      for(int i=0; i<sizem; i++)
        { 
        r2+=sizem;
        r2|=sizem; 
        }
     } 
   ulong t2=GetMicrosecondCount(); 
     {
      for(int i=0; i<Size(mas); i++)
        {  
        r2+=Size(mas);
        r2|=Size(mas); 
        } 
     }  
   ulong t3=GetMicrosecondCount();
   
  Print(t2-t1," ",t3-t2," ",r2) ; 
  }
 
int Size(int &mas[]){return Size2(mas);} 
int Size2(int &mas[]){return Size3(mas);} 
int Size3(int &mas[]){return ArraySize(mas);} 

ここでArraySizeを呼び出す 関数と速度の間のテストは、同じであることに注意してください、何ちょうど変数にアクセスする。なぜなら、コンパイラはそれらを展開するだけだからです

ArraySize

ArraySize()を使用する 都合上、異なる意見を持っています。


であり、並べ替えと何ら変わりはない。
Документация по MQL5: Основы языка / Функции / Вызов функции
Документация по MQL5: Основы языка / Функции / Вызов функции
  • www.mql5.com
Если некоторое имя, которое не было описано ранее, появляется в выражении и за ним следует левая круглая скобка, то оно по контексту считается именем некоторой функции. Аргументы (формальные параметры) передаются по значению, т. е. каждое выражение x1, . . . , xn вычисляется и значение передается функции. Порядок вычисления выражений и порядок...
 

the_baldの別のテスト....

なぜ、作成したものを一度テストするのですか?

百聞は一見にしかず

を外部ループコードでラップした結果。

HQ 0 15:26:55.230 tst (EURUSD,H1) 558620 543908 -512

RO 0 15:28:08.672 tst (EURUSD,H1) 544176 543129 -512

EF 0 15:28:09.759 tst (EURUSD,H1) 544139 543144 -512

RM 0 15:28:10.847 tst (EURUSD,H1) 544174 543436 -512

GD 0 15:28:11.934 tst (EURUSD,H1) 543668 543531 -512

CR 0 15:28:13.021 tst (EURUSD,H1) 543413 543097 -512

JI 0 15:28:14.107 tst (EURUSD,H1) 543046 543218 -512

HP 0 15:28:15.194 tst (EURUSD,H1) 543337 543469 -512

PO 0 15:28:16.282 tst (EURUSD,H1) 543602 544455 -512

KE 0 15:28:17.369 tst (EURUSD,H1) 543253 543197 -512

CL 0 15:28:18.457 tst (EURUSD,H1) 544199 543664 -512

私はテストサイクルを再配置しません、私はそれらに飽きた - 上記のコードサイズは、それは良い最適化を意味し、多分コードアナライザで、昨年私は驚いた、MQL4のiCustom最適化で - 4 =指標バッファの 4コールが1コールに置き換えられ、再び効率について、どこかにトピックがあった - 。

一般に、メタクオーツはユーザーからの型式コードの解析について良い仕事をしました。つまり、コンパイラがユーザーのもののほとんどを勝手に直してくれるのです。カッコいいですね。

 

すみません、間違っているかもしれません。全部は読んでないんですけどね。最初のページだけです。印象はいつも通りです。具体的な質問をする人がいる。そして、フラッダが急降下してくる。

何度もすみません、ここは本当に開発者のための掲示板なのでしょうか?

 
Сергей Таболин:

すみません、間違っているかもしれません。全部は読んでないんですけどね。最初のページだけです。印象はいつも通りです。具体的な質問をする人がいる。そして、フラッダが急降下してくる。

何度もすみません、ここは本当に開発者向けフォーラムなんでしょうか?

間違って、そこでもTCとは別の質問が出た。そして、コンパイルの原理を理解することが、時に助けになるのです。

理由: