巴解组织的间接费用

 

与资源密集型任务相关,出现了一个问题--与传统的程序化编程相比,使用OOP的开销是多少。

有人做过这样的测试吗?

我对两者之间的区别感兴趣。

  1. 带参数的函数调用
  2. 不带参数的函数调用
  3. 调用具有上述函数功能的宏
  4. 函数调用--类的方法
  5. 虚拟函数调用

 

我们谈论的是什么样的开销?

如果我们谈论的是机器代码,那么据我所知,虚拟函数 是通过虚拟函数表间接地调用过程。但在正常功能的情况下,这是一个直接的调用。我认为开销非常小。

程序员的开销要重要得多--代码编写和维护、错误修复......

 

没有参数的函数比有参数的函数更快。

 
Dmitry Fedoseev:

没有参数的函数比有参数的函数更快。


当然,我已经用汇编程序敲打了2年了 ))的确,对于嵌入式处理器来说,但C++始终是C++。即使是一个没有参数的函数也有一个序幕和尾声,这也需要时间。

当然,最快的方法是使用一个设计成函数样子的宏。很遗憾,MQL中没有内联函数,但宏可以代替

 
George Merts:

我们谈论的是什么样的开销?

如果我们谈论的是机器代码,那么据我所知,虚拟函数 是通过虚拟函数表间接地调用过程。而在正常功能的情况下,它是一个直接调用。我认为开销非常小。

程序员的开销要重要得多--代码编写和维护、纠错......


当然,我们并不关心执行时间的开销--那些额外的千字节并不重要。我们并不关心那些额外的千字节。

 

宏观当然是最快速的。

 
Alexey Volchanskiy:

最快的方法当然是设计成函数的宏。太糟糕了,MQL没有内联函数,但宏会是一个替代物

Rinat说,MT有严重的内联功能,并给出了良好的结果。

 
George Merts:

里纳特说,MT--一个严肃的inliner工作,并给出了良好的结果。


是的,根据我的个人观察,在MT4中,inliner的工作取决于堆栈大小(为堆栈中的变量分配的内存)和变量的数量。
但在MT5中,对堆栈大小的依赖似乎被消除了,而且优化器在那里一般来说更有帮助。

 
Alexey Volchanskiy:

与资源密集型任务相关,出现了一个问题--与传统的程序化编程相比,使用OOP的开销是多少。

有人做过这样的测试吗?

我对两者之间的区别感兴趣。

  1. 带参数的函数调用
  2. 不带参数的函数调用
  3. 调用具有上述函数功能的宏
  4. 函数调用--类的方法
  5. 虚拟函数调用

如果有现成的OOP库,这就减少了应用的开发时间。执行的速度可能会因为调用虚拟函数而有微小的下降。

唯一的细微差别是是否有好的OOP库。

"标准库 "侵犯了我的美感,让我去找DLL,悄悄地用C++写代码


 
George Merts:

Rinat说,在MT--一个严肃的inliner工作,并给出良好的结果。

是的,inliner是非常积极和自动的。

x64代码优化器也比32位版本高出一头(这个分支已经完全停止,没有开发)。此外,x64优化器知道如何将大多数虚拟函数 解卷为直接和内联调用。毕竟,虚拟函数往往是退化的。

但真正的开销是在引用操作和控制动态索引方面。他们必须一直受到控制。

 
Alexey Volchanskiy:

与资源密集型任务相关,出现了一个问题--与传统的程序化编程相比,使用OOP的开销是多少。

当然,你必须为OOP的漂亮功能付出资源和漫长的调试时间。OOP只有作为一个方便的文本包装,或者在运行时初始化中使用的情况下才有意义。实际上,OOP 只是微软的一个营销手段,目的是增加程序员的工作时间成本,刺激他们购买更先进的设备。而且他们自己也不是傻瓜,用C语言和汇编编写所有的软件。