Hatalar, hatalar, sorular - sayfa 1952

 
Stanislav Korotky :

Derleyici burada yardımcı olmaz - kontrol edilir - yerel nesne iade ile çoğaltılır ve ardından çivilenir. Bu durumda optimal bir hareket yoktur.


Hız testleri yaptınız mı? Yoksa sadece nesne yaratma gerçeğini mi teşhis ediyorsunuz? İkincisi ise, doğal olarak koddan hiçbir şey kesilmeyecektir, çünkü bunu kendi kontrollerinizle engellersiniz.

 
Alexey Navoykov :


Hız testleri yaptınız mı? Yoksa sadece nesne yaratma gerçeğini mi teşhis ediyorsunuz? İkincisi ise, doğal olarak koddan hiçbir şey kesilmeyecektir, çünkü bunu kendi kontrollerinizle engellersiniz.

Neye benziyor? Tüm kontrollerim yalnızca yapıcılarda ve yıkıcılarda teslim edilen izlerden oluşur. Gereksiz kopyalar oluşturulur ve silinirse, bu benim için optimizasyon eksikliğinin yeterli kanıtıdır.

 
Alexey Navoykov :


Herhangi bir hız testi yaptınız mı? Yoksa sadece nesne yaratma gerçeğini mi teşhis ediyorsunuz? İkincisi ise, doğal olarak koddan hiçbir şey kesilmeyecektir, çünkü bunu kendi kontrollerinizle engellersiniz.

Peki, eğer stringlerle hareket olmazsa, o zaman daha karmaşık nesneler hakkında ne söyleyebiliriz.

 
Stanislav Korotky :

Neye benziyor? Tüm kontrollerim yalnızca yapıcılarda ve yıkıcılarda teslim edilen izlerden oluşur. Gereksiz kopyalar oluşturulur ve silinirse, bu benim için optimizasyon eksikliğinin yeterli kanıtıdır.

Optimize edici, izlemenizin bulunduğu alanı kesemez) Yalnızca çalışma mantığını etkilemeyen alan kesilebilir.
 

Artık OnTesterInit'te her giriş parametresi için optimizasyon aralıkları ayarlayabilirsiniz. Bundan sonra, test cihazının kendisi bir geçiş tablosu oluşturur, bunu Acente/Paket sayısına böler ve Acentelere gönderir. Bu tablo şu anda hiçbir şekilde düzenlenmemiştir.

Ancak, Optimizasyon sırasında, aslında, her şeyden önce, bazı önemli parametrelerin değiştiği, sonra başka bir parametrenin değiştiği vb. Oluşturulan geçiş tablosunu (takas elemanları (giriş parametrelerinin setleri)) düzenlemek veya kendiniz oluşturmak mümkün olsaydı, o zaman en ilginç geçişler önce Aracılara gittiğinde gerekli önceliği ve ardından daha az ilginç olanlar.


Bu nedenle, OnTesterInit'te varsayılan geçiş tablosunu değiştirme yeteneği eklemeyi öneriyorum:

 long PassesTotal(); // количество проходов в таблице для Оптимизации

// Получает список входных параметров соответствующего прохода
int PassesGet( const int Index,   MqlParam & Parameters[] );


// Прописывает список входных параметров для соответствующего прохода,
// если индекс не меньше размера таблицы, то идет дозапись в конец таблицы и размер ее увеличивается на единицу
int PassesSet( const int Index, const MqlParam & Parameters[] );
 
Alexey Navoykov :
Optimize edici, izlemenizin bulunduğu alanı kesemez) Yalnızca çalışma mantığını etkilemeyen alan kesilebilir.

Neyse konu dağıldı ;-). Bu durumda optimizasyonun yalnızca kodda değerin döndürüldüğü noktada gerçekleşebileceğine ve hiçbir şekilde yapıcıda yazılanlara bağlı olmadığına inanıyorum.

C++11 standardı : Belirli kriterler karşılandığında, nesnenin kopyala/taşı yapıcısı ve/veya yıkıcısının yan etkileri olsa bile, bir uygulamanın bir sınıf nesnesinin kopyala/taşı yapısını atlamasına izin verilir. Bu gibi durumlarda, uygulama, atlanan kopyalama/taşıma işleminin kaynağına ve hedefine, aynı nesneye atıfta bulunmanın iki farklı yolu olarak davranır ve bu nesnenin yok edilmesi, iki nesnenin daha sonra olduğu zamanlarda gerçekleşir. optimizasyon olmadan yok edildi.

 
Stanislav Korotky :

Neyse konu dağıldı ;-). Bu durumda optimizasyonun yalnızca kodda değerin döndürüldüğü noktada gerçekleşebileceğine ve hiçbir şekilde yapıcıda yazılanlara bağlı olmadığına inanıyorum.

Genel olarak, MQL derleyicisinin düşündüğüm kadar akıllı olmaktan çok uzak olduğunu üzülerek itiraf etmeliyim) Hatta diyebilirim ki - hiç akıllı değil ) Basit örnekler çizmeye çalıştım ve ortaya çıktı ki, hiçbir yerde kullanılmayan ve hiçbir şey yapmayan kukla nesne oluşturulur, derleyici umursamaz. Optimizasyon yok. Tamamen işin hızına göre karar veririm. Ve nedense yeni yapılarda eskilerine göre daha yavaş çalışır.

İşte banal kod:

 class A { };

void OnStart ()
  {
     uint starttick= GetTickCount ();
     for ( int i= 0 ; i< 1 e8; i++)
    { 
      A a;
    }
     Print ( GetTickCount ()-starttick, " ms" );
  }
 
Alexey Navoykov :

Genel olarak, MQL derleyicisinin düşündüğüm kadar akıllı olmaktan uzak olduğunu üzülerek itiraf etmeliyim) hatta söyleyebilirim - hiç akıllı değil)


Çoğunluk tarafından kullanılan ve parmağınızdan emilen saçmalıklar olmayan gerçek şeylerin optimizasyonu için uyarlanabileceğini düşünmediniz mi?

 
Stanislav Korotky :

Neyse konu dağıldı ;-). Bu durumda optimizasyonun yalnızca kodda değerin döndürüldüğü noktada gerçekleşebileceğine ve hiçbir şekilde yapıcıda yazılanlara bağlı olmadığına inanıyorum.


Sadece 2 yıl içinde kopya yapıcılar tanıtıldı...
Sırada RVO (dönüş değeri optimizasyonu) ve NRVO (adlandırılmış dönüş değeri optimizasyonu) bekliyor...

 
Sergey Dzyublik :

Çoğunluk tarafından kullanılan ve parmağınızdan emilen saçmalıklar olmayan gerçek şeylerin optimizasyonu için uyarlanabileceğini düşünmediniz mi?

"en çok kullanılan gerçek şey" nedir?