错误、漏洞、问题 - 页 706

 
MetaDriver:

1.

要创建指向结构(数组)的数组,然后初始化它们 for(i){ S[i] = GetPointer(StaticStruct[i]); }

2.保持有意义的数据的稳固(打包)阵列。

在处理输出到OpenCL原始缓冲区的数据时(或发送至DLL、写入文件 等),非常重要。

同时,可以在不重写数据的情况下重新安排数据访问的顺序(例如,在对 指针进行排序时)。

具有安全执行的语言不应该暴露/提供直接访问。

班级有更多的保护措施,这就是为什么他们有一个把手。

只有类对象有指针。结构的实例和简单类型的变量没有指针。一个没有使用new()操作符创建的类对象,但是,例如,在一个对象数组中自动创建的,仍然有一个指针。只有这个指针会有自动类型POINTER_AUTOMATIC,而且你不能对它应用delete()操作符。在其他方面,类型的指针与POINTER_AUTOMATIC类型的动态指针没有区别。

由于结构类型和简单类型的变量没有指针,你不能对它们使用GetPointer()。也禁止传递指针作为函数参数。在上述所有情况下,编译器将报告一个错误。

将不会有其他对象的手柄,因为安全更重要。

在OpenCL中,任何数据类型都可以用来传递数据,包括结构。那里使用的是void*。只要准备好所需格式的统一数据,就可以开始工作了。预计会有这样的问题:"我不想那样做,我想用我的方式来做",我将回答说你不能那样做--安全更重要。

 
Renat:

1.任何数据类型 都可以在OpenCL中用于数据传输,包括结构。那里使用的是void*。只要准备好所需格式的统一数据,就可以开始工作了。预计会有这样的问题:"我不想那样做,我想用我的方式做",我将回答你不能这样做--安全更重要。

2.安全执行的语言不应暴露/提供直接访问。

重点是,对于所有的类,包括最原始的,mql5编译器创建了一个VMT,在对象里有相应的隐藏字段(指向VMT的指针)。 而在原始缓冲区(文件)里的这个指针对我来说太多。它不仅是占用空间的垃圾,而且还不适当地破坏了数据包的对齐方式(OpenCL缓冲区有128位的对齐方式)。 这就是问题的关键所在。 类的使用是很诱人的:它们在mql中的操作很方便。 但是...见上文。

在Delphi中,有一个很好的替代实现的例子。 VMT,相应的,VMT的指针 出现在类的层次结构中的第一个虚拟方法之后。 如果在mql5中也是这样的话,情况就更容易处理了。 人们可以使用没有虚拟方法的类来代替结构,也就不会有破坏结构的 "附加物 "了。

现在我遇到了这样一种情况:一个封装了数组结构的抽象 (旨在继承)类的实现并不适合继承的服务(如排序)。用类的数组代替结构的数组可以解决这个问题,但会产生另一个....。(见上文)。

而且我不要求任何 "直接访问",我对任何地址运算不感兴趣。你为什么要白白吓唬孩子呢?:) mql5句柄甚至不接近一个 "原始 "指针。而如果它(偷偷摸摸地)是--那么真正的安全漏洞就在这里,而不是在对任何用户数据的句柄(伪指针)的实现上。

---

现在你的结构实际上是没有虚拟函数的类(和VMT,分别)。 所以很好,只要给它们添加一些类的特征(句柄)。那么你也不会那么需要指向数组的指针了(如果有必要,你可以把它们包装成结构)。

 
MetaDriver:

重点不是我想用我的方式做;重点是对于所有的类,包括最原始的类,mql5编译器在对象中创建了具有相应隐藏字段的VMT(指向VMT的指针)。 而在原始缓冲区(文件)中的这个指针对我来说太多。它不仅是占用空间的垃圾,还以一种完全不合适的方式破坏了数据包的对齐方式(OpenCL缓冲区有128位的对齐方式)。 这就是问题的关键。 使用类是很诱人的:它们在mql中工作很方便。 但是......见上文。

在Delphi中,有一个很好的替代实现的例子。 VMT,相应的,VMT的指针 出现在类的层次结构中的第一个虚拟方法之后。 如果在mql5中也是这样的话,情况就更容易处理了。 人们可以使用没有虚拟方法的类来代替结构,也就不会有破坏结构的 "附加物 "了。

现在我遇到了这样一种情况:一个封装了数组结构的抽象 (旨在继承)类的实现并不适合继承的服务(如排序)。用类的数组代替结构的数组可以解决这个问题,但会产生另一个....。(见上文)。

而且我不要求任何 "直接访问",我对任何地址运算不感兴趣。你为什么要白白吓唬孩子呢?:) mql5句柄甚至不接近一个 "原始 "指针。而如果它(偷偷摸摸地)是--那么真正的安全漏洞就在这里,但不是在实现对任何用户数据的句柄(伪指针)。

你想用抽象的数据建立一个复杂的系统(这已经意味着大量的内部元数据和关系),然后把它交给一个不受控制的OpenCL环境,在那里它可以被棘手地改变。 这就是为什么我们只允许简单的对象和数组自由操作,而不能覆盖虚拟表。

你实际上是间接地要求通过 "抽象构造的自由 "来获得直接访问。为了安全起见,这是一个我们已经很好地探索并从架构上覆盖的话题。MQL5中的类按照自己的规则生活,强调安全。其他类型不会有手柄。对于简单的类型和结构,你可以使用数组中的索引,而不是句柄。

MQL5中的手柄本身是正确的(从一个开始生长),你可以检查。

 
Renat:

1.你想用抽象的数据建立一个复杂的系统(这已经意味着大量的内部元数据和关系),然后把它交给一个不受控制的OpenCL环境,在那里它可以被巧妙地改变。这就是为什么我们只允许简单的对象和数组自由操作,而没有能力覆盖虚拟表。

2.你实际上是间接地要求通过 "抽象结构的自由 "来直接访问。为了安全起见,我们对这一主题进行了充分的研究,并在架构上进行了覆盖。MQL5中的类按照自己的规则生活,强调安全。

MQL5中的手柄是正确的(从一个人开始增长),你可以自己检查。

我想把严格意义上的干净数据传入缓冲区,没有任何元数据(句柄)。我不需要这些元数据在缓冲区里,它们在那里碍事,而且我也不能把它们放在那里--CLBufferWrite() 不会让它们进入。而这是正确的。

2.我实际上 没有要求任何直接访问,我可以使用DLL进行直接访问(如果我需要)。

aPointer = memcpy(a,a);

将解决获得一个原始指针的问题。雷纳特,试着去了解真正的 问题。不要编造不" 实际 "存在的东西。所有实际存在的--我已经直接描述了它,而且在要求中没有任何微妙之处。尽可能以建设性的方式,在充分了解安全问题的情况下。

3.这很好。

--

你根本不应该做动态创建和删除结构(新建、删除)。那么安全问题也不会出现。 我明白问题 "实际上 "是什么(用你的语言来说)。 对于动态对象来说,有一个定义真实类型的问题。 对于类来说,它很可能通过分析VMT的指针来解决。然而:没有动态结构,没有问题。

 

想一想,相对于任何规模的实体而言,什么是 "把手"?

你可以为合理数量的对象(类、文件等)提供句柄。但如果你进入任何大小的数组区域,任何句柄都只有 机会成为一块内存的直接引用。否则,"句柄->内存 "映射表所占用的内存甚至超过了被引用的实体。

而基于安全规定,你不能有直接指向内存的句柄。这就是为什么没有 "任何不受约束的实体 "的手柄。

 

Renat:

1.你可以为数量合理的对象(类、文件等)提供句柄。但如果你进入任何大小的数组区域,任何句柄都只有 机会成为一块内存的直接引用。否则,句柄->内存映射表会比被引用的实体占用更多的内存。

2.根据安全条款,你不能有直接指向内存的句柄。这就是为什么没有 "任何不受约束的实体 "的手柄。

1.建设性是一件好事。我一直在想。这个问题恰恰是在与大量结构有关的情况下提出来的。 对于小结构来说,复制的时间是很短的。 我认为在这里出现问题只是因为用户的不合理性,但是你可以 "愚蠢地 "填满内存(例如用指示器缓冲区)。 我不认为有人会喜欢在没有任何特别需要的情况下使用 静态结构 的句柄。 而且如果内存溢出,那是你自己的错。不要太担心民间的无稽之谈,反正没有办法防止(甚至预测)一切。:)

2.不,不,不需要直接指针,但有句柄也无妨,甚至 "对任何不受限制的实体"。最主要的是,没有义务使用它们。 那么就会有足够的内存给每个人。:)

Усреднение ценовых рядов без дополнительных буферов для промежуточных расчетов
Усреднение ценовых рядов без дополнительных буферов для промежуточных расчетов
  • 2010.10.25
  • Nikolay Kositsin
  • www.mql5.com
Статья о традиционных и не совсем традиционных алгоритмах усреднения, упакованных в максимально простые и достаточно однотипные классы. Они задумывались для универсального использования в практических разработках индикаторов. Надеюсь, что предложенные классы в определенных ситуациях могут оказаться достаточно актуальной альтернативой громоздким, в некотором смысле, вызовам пользовательских и технических индикаторов.
 
MetaDriver:

我不明白你在这里吠叫什么。如果你想要句柄,把你的结构 声明为类,就是这样。

如果你想直接访问内存,就写一个dll。

Взгляни на рынок через готовые классы
Взгляни на рынок через готовые классы
  • 2010.10.26
  • Dmitriy Skub
  • www.mql5.com
Не секрет, что большую часть информации об окружающем мире человек получает при помощи зрения. Справедливо это и в такой области как трейдинг. Новая платформа MetaTrader 5 и язык MQL5 открывают новые возможности для представления визуальной информации трейдеру. В данной статье предлагается универсальная и расширяемая система классов, которая берет на себя всю черновую работу по организации вывода произвольной текстовой информации.
 
Urain:

我不明白你在这里折腾什么。

1.你想要句柄,把你的结构 声明为类,这就是全部。

2.如果你想直接访问内存,就写一个dll。

1.这就是问题所在:这是有问题的。我不需要把一个数组的类写进缓冲区(而且这是不可能的)。我需要在那里写结构。而且,我希望它能很快(不需要真正地从类重写成结构)。而手柄是需要重新排序访问的(用于排序,而且是用不同的键)。

替代品可以是我自己的索引表--但这样我就不能做一个类,用一个 有继承能力 的结构数组来封装工作,同时还有曾经规定的服务(排序和二进制搜索)。

2.我不想要它!!!不要当场为我辩护:))

 

不,我们不会做这种事。这是彻头彻尾的邪恶,我们将为此负责到底。

 

最理想的解决方案是可参数化的类

class MyClass<T>
{
  T MyArray[];
....
};
但我现在都不谈这个了,也许我应该谈?