在循环后面声明变量还是在循环里面声明变量? - 页 3

 
Aleksandr Matveev:

我怀疑这个评论的作者根本不知道处理器、内存和编译器的工作原理......

我认为作者太不周到了,他没有理解这个问题。

内存和CPU有什么关系? 这个问题是关于MQL5的优化。

P.S. 闲暇时可以阅读娱乐性的小书《 注意力发展的技巧》,O.A. Andreev,2007年

Техника развития внимания, Андреев О.А., 2007
Техника развития внимания, Андреев О.А., 2007
  • 2018.04.27
  • nashol.com
Смотреть, читать и скачать бесплатно pdf, djvu и купить бумажную и электронную книгу по лучшей цене со скидкой: Техника развития внимания, Андреев О.А., 2007. Настоящая книга написана по Программе интеллектуального и духовного развития личности Школы Олега Андреева. Она посвящена тренировке внимания. Можно использовать книгу как часть Программы или как самостоятельное пособие по технике развития внимания. Настоящее издание является более полным, чем предыдущие, включает новые материалы для самостоятельной работы. Информация изложена в виде восьми уроков. Каждый содержит теоретический раздел, упражнения и инструкции к
 
pivalexander:

内存和CPU有什么关系? 这个问题是关于MQL5的优化。

那么,在你看来,这段代码既不使用内存也不使用CPU?而我在回答关于编译器的说法时说:"你必须努力尝试才能打败现代编译器的优化功能。"

 
Aleksandr Matveev:

我怀疑这个声明的作者根本不知道处理器、内存和编译器是如何工作的......我愿意打赌,你的任何代码都可以被加速至少十倍,甚至数百倍。

因此,首先尝试就有关的代码进行证明。此外,如果你相信伊戈尔引用的上述结果,情况正好相反:循环内的声明工作得更快一点。

因此,所有这些试图超越编译器的舞蹈和洗牌,最终都要付出更大的代价。这使得编译器更难优化代码。当一个变量在块外声明时,它被认为是外部的,并在迭代之间保留其状态,这意味着编译器优化它的能力有限。 如果你熟悉函数式编程范式,干净的代码总是比 "脏 "代码(有副作用)优化得更好。

 
Alexey Navoykov:

因此,首先尝试就有关的代码进行证明。此外,如果你相信伊戈尔引用的上述结果,情况正好相反:循环内的声明工作得更快一点。

因此,所有这些试图超越编译器的舞蹈和洗牌,最终都要付出更大的代价。这使得编译器更难优化代码。当一个变量在块外声明时,它被认为是外部的,并在迭代之间保留其状态,这意味着编译器优化它的能力有限。 如果你知道函数式编程范式,干净的代码总是比 "脏 "代码(有一些副作用)更好的优化。

闲暇时阅读我的书,我想你会学到很多关于编译器的知识。

 
Alexey Navoykov:

因此,首先尝试就有关的代码进行证明。此外,如果你相信伊戈尔引用的上述结果,情况正好相反:循环内的声明工作得更快一点。

因此,所有这些试图超越编译器的舞蹈和洗牌,最终都要付出更大的代价。这使得编译器更难优化代码。当一个变量在块之外声明时,它被认为是一个外部变量 在迭代之间保留其状态。 这意味着编译器对其优化的选择有限。 如果你熟悉函数式编程范式,干净的代码总是比 "脏 "代码(有副作用)优化得更好。

我的测试显示了相反的情况,在循环后面有一个变量声明 的代码工作得更快。

https://www.mql5.com/ru/forum/320307/page2#comment_12886814

Объявление переменных за циклом или внутри цикла?
Объявление переменных за циклом или внутри цикла?
  • 2019.08.18
  • www.mql5.com
или Есть ли разница? с учетом всех оптимизаций компилятора mql5...
 
pivalexander:

运行多次,结果是稳定的,在循环后声明变量 的代码,工作更快。

这很奇怪,但早些时候,这个人的结果是相反的
 
pivalexander:

我的测试显示了相反的情况,在循环后面有一个变量声明 的代码更快。

你在循环内得到的结果不会以任何方式使用。这种空洞的测试结果是不可信的。在一种情况下,编译器可以简单地剪掉整个循环体。
 
Alexey Navoykov:
这很奇怪,但早些时候,这个人的结果正好相反

你应该先学习基础知识,然后证明你的观点。如果你至少读过一本关于CPU和内存操作的书,你会明白这个结果,不需要任何测试。我给你提供了最巧妙的一个,如果你想在编程方面有一点进步,你会读到它。

[删除]  
Alexey Navoykov:
奇怪的是,早些时候,这个人的结果正好相反

我已经说过,在一个人为的例子上进行这样的速度测试根本不具有参考意义。我在调试器下的研究还不够吗?我没有任何可信度吗?都忽略了,看你的了,我不干了。

 
Alexey Navoykov:

此外,如果你相信伊戈尔的上述结果,情况恰恰相反。

我不相信自己,我总是反复检查,我不认为你需要提高我的自尊心......历史上有过不同的案例,我要找一个拿破仑,然后就开始了!))))


阿列克谢-纳沃伊科夫
这很奇怪,但早些时候这个人得到了相反的结果。

为什么我在测试中加入srand(GetTickCount())??

;)