Dizi referansları - sayfa 6

 

Bilgi için:

  1. MQL5'teki tüm diziler yalnızca referansla iletilir (yığın üzerinde 4 veya 8 bayt), bu nedenle dizileri işlevlerin içine geçirmekten korkmayın - özel bir masraf yoktur.
  2. Çıkarılan gerçek bellek referanslarını, özellikle de terminalin kendisi tarafından yönetilen dizilere ( gösterge tamponları , OHLC tamponları) yapılan referansları, aslında değiştirildikleri/yeniden tahsis edildikleri için saklamak çok tehlikelidir. Ayrıca, bir Expert Advisor'ın çağrıları (çıkış ve kod koduna giriş) arasında belgelenmemiş bağlantıları kaydetmek mümkün değildir.
  3. Bir diziyi DLL'ye aktarırken, veri bloğunun başlangıcının adresi belirtilir ve boyutların ayrıca belirtilmesi gerekir.
 
mql5 :

Önce NEDEN'i anlamanız gerekir. Ve bunun kullanımı nedir?

Bağlantı kurmak istemezsiniz - onları kendimiz yaparız.

Evet ve ilgililere teşekkürler, bu konudaki mesajlar sayesinde yardımdaki açıklamanın eski olduğunu gördüm ...

Evet, bu bir şaka). Ama aslında, bunun yardımda yayınlanabileceğini hayal bile etmemiştim.

O zaman bana tüm bayraklardan bahseder misin?

Renat :

Bilgi için:

  1. MQL5'teki tüm diziler yalnızca referansla iletilir (yığın üzerinde 4 veya 8 bayt), bu nedenle dizileri işlevlerin içine geçirmekten korkmayın - özel bir masraf yoktur.

Korkmuyorum, ucuz olduğunu çok iyi anlıyorum. Sadece rahatsız edici.

  1. Çıkarılan gerçek bellek referanslarını, özellikle de terminalin kendisi tarafından yönetilen dizilere ( gösterge tamponları , OHLC tamponları) yapılan referansları, aslında değiştirildikleri/yeniden tahsis edildikleri için saklamak çok tehlikelidir. Ayrıca, bir Expert Advisor'ın çağrıları (çıkış ve kod koduna giriş) arasında belgelenmemiş bağlantıları kaydetmek mümkün değildir.

Bu an hakkında daha ayrıntılı olarak lütfen - OnCalculate sırasında hafızanın yeniden tahsisi olabilir mi? Bu bir pipet.

Aramalar arasında hakkında elbette açıktır.

Hindileri veya genel olarak terminali çökerten bir özelliğin olması benim çıkarım değil, bu yüzden en güvenli seçeneği yayınlayacağım.

 
TheXpert :

Bu an hakkında daha ayrıntılı olarak lütfen - OnCalculate sırasında bir depolama yeniden tahsisi olmadıkça ?? Bu bir pipet.


"Sırasında" değil - ve arasında.
 
TheXpert :

Bu an hakkında daha ayrıntılı olarak lütfen - OnCalculate sırasında bir depolama yeniden tahsisi olmadıkça ?? Bu bir pipet.

Aramalar arasında hakkında elbette açıktır.

Çağrılar arasında olası yeniden dağıtım hakkında kesinlikle konuşma.

Sorun şu ki, birisi kesinlikle yanlışlıkla veya aramalar arasındaki bağlantıyı açıkça kaydedecek, vakaların% 99'unda her şey çarpışma anına kadar çalışacak. Bundan sonra, oldukça beklenen düşünceler olacak "Metaquots suçlanacak."

Örneğin, yoldaşlarımızdan biri bu tür düşünceleri yayınlıyor ve birkaç yıldır yayınlamaya devam ediyor, zorluklar arasındaki tarihin pompalayabileceği / değişebileceği gerçeğiyle uzlaşamıyor.

 
Renat :

Çağrılar arasında olası yeniden dağıtım hakkında kesinlikle konuşma.

Sorun şu ki, birisi kesinlikle yanlışlıkla veya aramalar arasındaki bağlantıyı açıkça kaydedecek, vakaların% 99'unda her şey çarpışma anına kadar çalışacak. Bundan sonra, oldukça beklenen düşünceler olacak "Metaquots suçlanacak."

"Suçluluktan korkmak - ileri gitme" (c)

Ve bir şey daha: Yaptıklarından pişman olmak, yapmadıklarından daha iyidir.

Renat, diyelim ki referans değişkenlerin potansiyel bir sorun kaynağı olduğuna katılıyorum. Ancak bu hemen hemen her enstrüman için söylenebilir. Ellerinde tornavida olan insanlar bazen başkalarını dürter. Tornavidaları şimdi yasaklamıyor musunuz? Ve dahası, onları evde de sorunsuz bir şekilde yapabileceğiniz için, üretimden çıkarmanın bir anlamı yoktur.

Bir mql varlığı olarak "referanslar", değişkenler biçiminde bile değil, bir işlevden bir referans (değer) döndürme yeteneği biçiminde bile oldukça arzu edilir. Bu, kapsayıcılar için en azından gerçekten hızlı sol dizin oluşturucular oluşturmanıza ve size birçok ek özellik sunmanıza olanak tanır. Tip:

MyTree.Search(Key).GetElement() = NewVal;

Ve sonuçta, bir fonksiyondan yerel bir değişkene referans döndürmek isteyenlerin kesinlikle olacağını anlıyorum!

Ve şimdi ne? Bağlantıları unutun, çünkü aptallar onlarla hayatı kendileri için zorlaştırabilir mi? :)

--

Bunlar, mql5'in (bağlantı eksikliğine benzer şekilde) bazen güçlü bir şekilde "DLL'ye kaçmayı" motive eden sınırlamalarıdır ve MT5'i komisyoncu ile iletişim sağlayan yalnızca bir "piyasa sürücüsüne" dönüştürür. Ancak orijinal fikir tam tersiydi - harici programlama araçlarını kullanma ihtiyacını ortadan kaldırmak, çünkü " her şey burada ".

 

Maksimum dil güvenliğini hedeflediğimiz için geri dönüş yok.

Ham bağlantılarla çalışmak, çökmeye doğru sağlam ve emin bir adımdır. Ve tüm sanallaştırma sistemini kaldıran programların düşmesine izin verilmez.

Kararımız tamamen bilinçlidir. MQL5, çok sayıda bilgisayarda ve insan müdahalesi olmadan çalışacak programlar yazmak için kullanılır.

 

Genel olarak, kimin ihtiyacı var, umarım ilke açıktır. Ben kendi çıkarım için uygulamayı şimdilik saklayacağım. Ama açılacak ve açılacak.

Sanırım int gibi temel türlere yapılan göndermelerin çok daha kolay ve sorunsuz hale getirildiğini açıklamaya gerek yok.

Uygulamada zorluklara ve sorulara neden olan tek konu temel değişkenin kapsamıdır. Uygulamalar ve fikirler için aslında çok geniş bir alan var.

________

Motivasyon için, bağlantıların, örneğin sarmalayıcılar gibi tüm ek özellikler katmanını açtığını belirtmekte fayda var.

 
değerli referanslar planlanmıştır...
 
mql5 :
değerli referanslar planlanmıştır...
Kahretsin, hemen derlerdi) Acı çekmezdim. Ama bu harika.
 

Herkese hoş geldiniz.


Merak ediyorum, sekiz yılda bir şeyler değişti mi?

Yoksa dizi adresini OnCalculate()'den yalnızca msvcrt.dll ve memcpy işlevini kullanarak almak hala mümkün mü?

Yoksa herkes hala tüm sınıf yapısı boyunca dizilere referansları "sürükliyor" mu (bir seçenek, kendi dizilerini organize etmek ve içerikleri her seferinde kopyalamaktır)?

Neden: