Hatalar, hatalar, sorular - sayfa 816

 
Benim düşünceme göre, bir nesne üyesine doğrudan erişimin ilk durumunun yalnızca bir optimizasyonu var.

İkinci durumda, mikroskobik bir döngü gövdesiyle, doğal olarak zamanın yarısını alan ve ikiye katlayan bir bağlantı yoluyla dolaylı erişim vardır.
Документация по MQL5: Основы языка / Типы данных / Структуры и классы
Документация по MQL5: Основы языка / Типы данных / Структуры и классы
  • www.mql5.com
Основы языка / Типы данных / Структуры и классы - Документация по MQL5
 
Test biraz yanlıştır, esasen yüz milyonuncu döngüye yerleştirilmiş bir montajcı talimatı ile iki montajcı talimatı arasındaki farkı karşılaştırır.
 
Renat :
Benim düşünceme göre, bir nesne üyesine doğrudan erişimin ilk durumunun yalnızca bir optimizasyonu var.

İkinci durumda, mikroskobik bir döngü gövdesiyle, doğal olarak zamanın yarısını alan ve ikiye katlayan bir bağlantı yoluyla dolaylı erişim vardır.

Renat, gerçek hayatta büyük miktarda veri işlenir. Sorunlu alanı göstermek için testi zaten basitleştirdim. Başlangıçta, dizilerimde ve sınıflarımda yaptım. Sonra onu bir şemaya böldüm.

yani, aslında, yalnızca bir arr nesnemiz değil, bir dizi karmaşık nesneye (ayrıca dizilerle birlikte) sahibiz.

Bu kabaca bir diyagramda şu şekilde yazılabilir:

 class A
{
   double prm1;
   int prm2;
   string prm3;
   char prm4;
}

class B
{
   A m_a[ 1000 ];
}

B _b[ 1000 ];



A dizisinin belirli bir öğesine bir başvuru alırsanız

А * item = GetPointer (_b[i]._a[j]);

daha sonra A::prmX parametreleriyle çalışmak daha hızlı olacaktır.


Ama dizi isimlerinden sosis çekmenin

 _b[i]._a[j] .prmX  

belirli bir öğeye erişmekten en az iki kat daha hızlı çalışır.

Bu beni biraz şaşırttı ve çekirdekte bir tür sözde işaretçinin alınmakta olduğu ortaya çıktı.

En azından hız farkını azaltan hızı bir şekilde optimize etmek mümkün mü?

 
sergeev :

hatasız böyle oluyor

Bu testte herhangi bir hata olmayacaktır. Ancak bu yöntem temel soruyu çözmez: derleyici neden herhangi bir hata ve/veya uyarı vermeden sabit bir nesne referansını sabit olmayan bir referansa dönüştürmeyi atlar. Eğer bu böyle bir özellikse, soru yoktur, ancak sınıf yöntemlerinin imzasındaki dönüş türü için const değiştiricisinin anlamı kaybolur.
 
mvk :
Bu testte herhangi bir hata olmayacaktır. Ancak bu yöntem temel soruyu çözmez: derleyici neden herhangi bir hata ve/veya uyarı vermeden bir nesne sabit referansını sabit olmayan bir referansa dönüştürmeyi atlar. Eğer bu böyle bir özellikse, soru yoktur, ancak sınıf yöntemlerinin imzasındaki dönüş türü için const değiştiricisinin anlamı kaybolur.

Bence hepsi mantıklı.

const nesnesinin işlevleri nesnenin kendisini değiştirmemelidir, bu nedenle const değiştiricisine de sahip olmalıdırlar.

ama hakkında

   //Ошибки нет. Это НЕ правильно(CONST A* B::getA())!
   A* a2 = b.getA();

Evet, buna C++'da izin verilmez. bir hata olacak.

servis masasına yazın.

 
sergeev :

Ama dizi isimlerinden sosisleri çekmenin

belirli bir öğeye erişmekten en az iki kat daha hızlı çalışır.

Gerçekten daha hızlı çıktı mı yoksa çıktının diğer basit durumlara dayalı mantıklı bir yapısı mı?

Benim düşünceme göre, çok boyutlu bir diziye sunulan erişime dayalı hiçbir saf kanıt henüz sunulmamıştır. Özellikle açıkçası pahalı olan ek GetPointer işlevi göz önüne alındığında.


Bu beni biraz şaşırttı ve çekirdeğe bir tür sahte işaretçinin alınmakta olduğu ortaya çıktı.

MQL5'te alışılagelmiş anlamda hiçbir işaretçi yoktur, bunlar sonraki tüm sonuçlarla birlikte ele alınır.


En azından hız farkını azaltan hızı bir şekilde optimize etmek mümkün müdür?

Sürekli olarak optimizasyon üzerinde çalışıyoruz, ancak bağlantılar / tutamaçlar söz konusu olduğunda dolaylı erişimde bir sistem ek yükü var.

Her durumda, bu erişimi optimize etmeye daha yakından bakacağız.

Документация по MQL5: Основы языка / Переменные
Документация по MQL5: Основы языка / Переменные
  • www.mql5.com
Основы языка / Переменные - Документация по MQL5
 
Renat :

Gerçekten daha hızlı çıktı mı yoksa çıktının diğer basit durumlara dayalı mantıklı bir yapısı mı?

evet, hepsi çok gerçek. dizilerini doldurma konusunda test edildi. her zaman iki kat daha yavaş çıktı.

Benim düşünceme göre, çok boyutlu bir diziye sunulan erişime dayalı hiçbir saf kanıt henüz sunulmamıştır.

Pekala, uygulanması için şemayı ve A, B sınıfı ve dizilerin görüntüsünü hazırladım.


Özellikle açıkçası pahalı olan ek GetPointer işlevi göz önüne alındığında.

döngüye girmeden önce bir kez çağrılır. ancak prensipte, daha doğru bir test için GetTickCount'tan da çıkarabilirsiniz.

Her durumda, bu erişimi optimize etmeye daha yakından bakacağız.

TAMAM. teşekkür etmek. gereken budur.

 
sergeev :

döngüye girmeden önce bir kez çağrılır. ancak prensipte, daha doğru bir test için GetTickCount'tan da çıkarabilirsiniz.

Ve kod böyleyse, döngünün nasıl dışında?
А * item = GetPointer (_b[i]._a[j]);
 
Dilek. Metnin ölçeğini artırma yeteneğini yardıma dahil etmek mümkün mü? Örneğin. + veya - veya Ctrl+fare tekerleği.
 
paladin800 :
Dilek. Metnin ölçeğini artırma yeteneğini yardıma dahil etmek mümkün mü? Örneğin. + veya - veya Ctrl+fare tekerleği.

Büyük olasılıkla bu imkansız. Çevrimiçi sürüm çalışmıyor mu?

İşte internette bu konuyla ilgili bulduklarım - http://forum.ru-board.com/topic.cgi?forum=62&topic=20907

GÜNCELLEME Daha Fazla http://forum.ixbt.com/topic.cgi?id=23:39211

Невозможно изменить размер шрифта при просмотре .CHM файлов. :: Microsoft Windows :: Компьютерный форум Ru.Board
  • forum.ru-board.com
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору