Hatalar, hatalar, sorular - sayfa 2500
Ticaret fırsatlarını kaçırıyorsunuz:
- Ücretsiz ticaret uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Kayıt
Giriş yap
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
Hesabınız yoksa, lütfen kaydolun
Yanlış yerde bir yeri kazıyorsunuz, hizalama sizin için hiç gerekli değil, işlemcinin buna ihtiyacı var, böylece bazı int iki önbellek satırına girmez.
hayır, işlemci önbelleği genellikle önceden veri getirme ile yüklenir ve çeşitli önbellek seviyeleri genellikle dal tahminleriyle yüklenir, pack() oraya (önbelleğe) ulaşamaz, 1 üzerinde yürütülmek yerine herhangi bir aritmetik işlem (2 int eklenmesi) veya 3 (varsayımsal) döngü, veri hizalama analizi ve benzerleriyle sonuçlanacaktır.
Fiziksel düzeyde, şöyle çalışmalıdır: derleyici, içinde yürütülebilir kod oluşturdu, evet olacak pack(), ancak RAM'den veri yüklerken, yalnızca int verileri okunacak ve veri segmenti işaretçisi hemen pack() bayt (int bayt başına değil)
Çok yanılıyor olabilirim, ancak şimdi tüm işlemler (işlemcinin çalışması dahil) sanallaştırıldı ve optimize edildi, bu yüzden nedenim Pentium -1 hakkında okurken bir kitap okudum .... korku ne kadar pahalıydı bir kere))))
hayır, işlemci önbelleği genellikle önceden veri getirme ile yüklenir ve çeşitli önbellek seviyeleri genellikle dal tahminleriyle yüklenir, pack() oraya (önbelleğe) ulaşamaz, 1 üzerinde yürütülmek yerine herhangi bir aritmetik işlem (2 int eklenmesi) veya 3 (varsayımsal) döngü, veri hizalama analizi ve benzerleriyle sonuçlanacaktır.
Fiziksel düzeyde, şöyle çalışmalıdır: derleyici, içinde yürütülebilir kod oluşturdu, evet olacak pack(), ancak RAM'den veri yüklerken, yalnızca int verileri okunacak ve veri segmenti işaretçisi hemen pack() bayt (int bayt başına değil)
Paket () belirtecinin CPU için bir hizmet bilgisi olduğunu söylemedim, demek istediğim - hizalı tüm bu danslar programcının değil CPU'nun çıkarınadır. Doğal olarak bu, derleyici tarafından yapılara boşluklar eklenerek gerçekleştirilir.
Yani MQL5'te hiç hizalama yoktur.
Uzun bir süre, şimdiki gibi.
Yanlış yerde bir yeri kazıyorsun, hizalama senin için hiç gerekli değil
Her ne kadar gerçek bir kullanım akla gelse de - çok iş parçacıklı bir ortamda, verileri farklı çekirdekler aynı önbellek satırına yazmayacak şekilde düzenlemek, bu, önbelleklerin sürekli senkronizasyonu nedeniyle performansı büyük ölçüde yavaşlatabilir. CPU türünde de birçok nüans var.
Uzun bir süre, şimdiki gibi.
Bunun hakkında nerede yazdıklarını hatırlıyor musun?
O zaman korkarım hizalamanın anlamı kaybolur
Hizalamanın ne yaptığını görmek için bayt cinsinden denedim:
2019.07.07 17:51:30.601 tst (EURUSD,H1) 0xFFFFFFFF FFFFFFFF = 4294967295.4294967295
2019.07.07 17:51:30.601 tst (EURUSD,H1) A.=4294901760.4294967295
2019.07.07 17:51:30.601 tst (EURUSD,H1) B.=4294901760.4294967295
ya henüz uyanmadım ya da pack(4) / pack(8) hizalaması çalışmıyor, derleyiciye A ve Byapılarının boyutlarını açık bir şekilde belirttim
yine de:
hiçbirşey değişmediBunun hakkında nerede yazdıklarını hatırlıyor musun?
Belgelerde olup olmadığını hatırlamıyorum.
Hizalamanın ne yaptığını görmek için bayt cinsinden denedim:
ya henüz uyanmadım ya da pack(4) / pack(8) hizalaması çalışmıyor , derleyiciye A ve Byapılarının boyutlarını açık bir şekilde belirttim
Ve böylece bu tartışma başladı . Her şeyin hiç de öyle olmadığı ortaya çıktı.
Peki, örnek yanlış. Ushort alanını sıfırlayarak, ekstra baytların hiç değişmesi gerekmez.
ZeroMemory, büyük olasılıkla, sizeof'a odaklanır ve her iki durumda da kendi başına bir nedenden dolayı bir ikili olur.
Ve böylece bu tartışma başladı . Her şeyin hiç de öyle olmadığı ortaya çıktı.
1. Örnek hala yanlış. Ushort alanını sıfırlayarak, ekstra baytların hiç değişmesi gerekmez.
2 ZeroMemory, büyük olasılıkla, sizeof'a odaklanır ve her iki durumda da kendi başına bir nedenden dolayı bir ikili olur.
1. evet katılıyorum
2. ZeroMemory hafızamı sıfırlamalı
genel olarak, saf MQL'de pack()'teki noktayı görmüyorum, .dll'de maksimum veriyi sürebilirsiniz, ancak kesinlikle orada çalışması gerekir - geliştiricilerin dediğine göre
2. ZeroMemory hafızamı sıfırlamalı
böyle gidiyor