uzmanlar için soru #define - sayfa 11

 
Igor Makanu :

CPU komutunda fiziksel olarak varsa, o zaman hayır

dizi bir bellek parçasıdır, dizi öğelerine erişim, bu bellek parçasının başlangıcından itibaren öğe indeksinin hesaplanması ve saklanan türe göre verilerin (bayt) çıkarılmasıdır.


algoritmanın mantığı buysa, evet - bunlar dizine alınmış değişkenlerdir

genel olarak, incelenen sorunla ilgili tek doğru tavsiye https://www.mql5.com/en/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; 
        }
     } 

İkili bir işlemin yürütme süresi, bir if ifadesinin yürütme süresinden birkaç kat daha hızlıdır (olması gerektiği gibi).... Sahne arkasında, temiz veya süper hızlı yerel kod

Üsttekinin süresi, alttakinin yarısı kadardır.


Teknik olarak iki değişkeni karşılaştırıyorduk))

 
Alexandr Andreev :

İkili bir işlemin yürütme süresi, bir if ifadesinin yürütme süresinden (olması gerektiği gibi) birkaç kat daha hızlıdır....

CX kaydındaki döngü yürütülmeden önce döngülerde if() olmamalıdır

Alexandr Andreev :

Üsttekinin süresi alttakininkinin yarısıdır.

Bunu tartışmıyorum, sabah tekrar test ettim, çalışma zamanı optimizasyonu her zaman MQL5'te çalışır, sonuç döngü sayısına bağlıdır, peki, tekrar test etmeyeceğim, bu zaman kaybı

 
Igor Makanu :

CX kaydındaki döngü yürütülmeden önce döngülerde if() olmamalıdır

Bunu tartışmıyorum, sabah tekrar test ettim, çalışma zamanı optimizasyonu her zaman MQL5'te çalışır, sonuç döngü sayısına bağlıdır, peki, tekrar test etmeyeceğim, bu zaman kaybı

.... Gönderilerinizi takip etmeniz gerekir)))) yukarıdaki gönderi, ArraySize operatörünün sınırların dışına çıkmak için bir kontrol yaptığı (BU sizin if'nizdir) ve bunu ekleyerek olduğu varsayıldığı bir gönderiye atıfta bulunur. vücuda kontrol etmenin gerçekten mümkün olduğunu ve bu tek doğru yol.

Ve ilkini çalıştırmanın farkı sadece testlerinizde)

 
Alexandr Andreev :

Ve ilkini çalıştırmanın farkı sadece testlerinizde)

Testini ver bakalım

her ne kadar ... nafig, genel olarak, anlaşmazlığa otomatik olarak katılıyorum, kullanmayı seviyorum, döngüyü sonlandırma durumunda ArraySize () kullanmanın tavsiye edilebilirliği konusunda farklı bir fikrim var

 

boyutlar .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
}
 
Ve derleyicinin yaratıcılarından başka kim bilebilir? Belki ArraySize() tıpkı bir değişkene erişmek gibi çalışır. Mümkün görünüyor.
 
Dmitry Fedoseev :
Ve derleyicinin yaratıcılarından başka kim bilebilir? Belki ArraySize() bir değişkene erişmekle tamamen aynı şekilde çalışır. Mümkün görünüyor.
 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);} 

Lütfen burada, ArraySize çağıran bir işlevi çağıran birişlevi çağıran bir işlev ile hızın yalnızca bir değişkene erişmekle aynı olduğu arasında bir test olduğunu unutmayın. Çünkü derleyici sadece onları genişletir

 ArraySize 

ArraySize () kullanmanın tavsiye edilebilirliği konusunda farklı bir fikrim var


ve permütasyondan hiçbir farkı yok
Документация по MQL5: Основы языка / Функции / Вызов функции
Документация по MQL5: Основы языка / Функции / Вызов функции
  • www.mql5.com
Если некоторое имя, которое не было описано ранее, появляется в выражении и за ним следует левая круглая скобка, то оно по контексту считается именем некоторой функции. Аргументы (формальные параметры) передаются по значению, т. е. каждое выражение x1, . . . , xn вычисляется и значение передается функции. Порядок вычисления выражений и порядок...
 

yine bir test from_balda ....

Yaratılışınızı neden bir kez test ediyorsunuz?

ne olduğunu görmek için en az on kez test edin

kodu bir dış döngüye sarın, sonuç:

genel merkez 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

İncelenen döngüleri yeniden düzenlemeyeceğim, bundan bıktım - kodun boyutu yukarıda verildi, bu da muhtemelen bir kod analizörü ile iyi optimizasyon anlamına geliyor, geçen yıl MQL4 - 4 için iCustom optimizasyonunda şaşırdım 4=x gösterge tampon değerlerine yapılan çağrılar bir çağrı ile değiştirilir, bir yerde bir konu vardı, yine verimlilikle ilgili

genel olarak, Metaquotes, kullanıcılardan gelen tipik kodları analiz etme konusunda iyi bir iş çıkardı; Derleyicinin kendisi, kullanıcıların yazılarının çoğunu sıraya koyacaktır, .. IMHO harika!

 

Üzgünüm, belki yanılıyorum. Bütün bunları okumadım. Sadece ilk sayfa. İzlenim - her zamanki gibi. Birisi belirli bir soru soruyor. Ve sonra fluderastlar uçar.

Tekrar özür dilerim, BU GERÇEKTEN BİR GELİŞTİRİCİ FORUMU MU????

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

Üzgünüm, belki yanılıyorum. Bütün bunları okumadım. Sadece ilk sayfa. İzlenim - her zamanki gibi. Birisi belirli bir soru soruyor. Ve sonra fluderastlar uçar.

Tekrar özür dilerim, BU GERÇEKTEN BİR GELİŞTİRİCİ FORUMU MU????

Yanılıyorsunuz, orada ve DONANIM'ın sorularından farklı olarak başka sorular ortaya çıktı. Ve derleme ilkelerini anlamak bazen yardımcı olur.