新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 1005

 
下面是它的工作原理。
 
Seric29:
下面是它的工作原理。
伊利亚斯已经解释得很清楚了。在他的帖子里找找看。
 
Seric29:
下面是它的工作原理。

你确定你已经阅读了文档中的所有内容吗?你甚至读过这个。

注意事项

该函数只能应用于动态数组。 你应该记住,由SetIndexBuffer()函数分配为指标缓冲区的动态数组不能被调整大小。所有与调整指标缓冲区大小有关的操作都由终端的执行子系统执行。

一个数组中的元素总数不能超过2147483647。

如果经常分配内存,建议使用第三个参数指定储备,以减少物理内存的分配量。所有对 ArrayResize函数的后续调用 不会导致物理内存的重新分配,只是在保留的内存中对数组的第一维进行了调整 请记住,第三个参数只在物理内存分配过程中使用,比如说。

ArrayResize(arr,1000,1000);
for(int i=1;i<3000;i++)
ArrayResize(arr,i,1000)。

在这种情况下,将有2次内存重新分配,一次是在进入3000次迭代的循环之前,数组维度设置为1000,第二次是在i等于2000时。如果省略第三个参数,将有2000个物理内存的重新分配,这将减慢程序的执行。


有什么不清楚的地方?

 
Alexey Viktorov:

你确定你已经阅读了文档中的所有内容吗?甚至读到这个。

这有什么不清楚的?

好吧,这就是问题的关键,没有图片或例子,你可以猜测这些重新分配的意思,如果没有解释,如何100%按照开发者的想法使用它。从这里写的这3行来看,我认为ArrayResize(arr,1000,1000); 创建了一个有2000个元素的数组。但这里并不清楚。如果我做ArrayResize(arr,1,1000); 例如,1000会空转,直到数组到了1000。

for(int i=1;i<1001;i++)ArrayResize(массив,i,1000);

或者程序会在超频前使用这个片段,只是将计数器递增。在一般情况下,我说这是不清楚的,就这样。 或者这1000个它只是愚蠢的躺在那里,迅速从处理器中舀出内存,如果是这样,那么所有的和备份内存,也将不得不转移,那么它更容易工作,没有储备。一般来说,没有代码,没有信息,没有图片,不知道如何工作。

 
你是否遇到过这种情况,即硬盘被某种系统类100%加载(在10ka上)?这也发生在阿尔卑斯山的终端...通常终端在测试时加载磁盘,但在这里只是kabbda...时间不长,3-5秒,但很具体
 
Yevhenii Levchenko:
你是否曾经发生过这种情况,你的硬盘100%启动系统类的某种(在10上)?这也发生在阿尔卑斯山的终端...通常终端在测试时加载磁盘,但在这里只是kabbda...时间不长,3-5秒,但很具体

发生,但在电脑重新启动后

在电脑重启后的10-15分钟内,Windows Defender会 "吃掉磁盘 "并收集电脑使用情况的统计数据。

解决办法--暂停电脑,我的电脑可以一个月不重启,我按下键盘上的睡眠按钮,而不是关闭电脑--有几次停电了,如果电脑处于睡眠状态,Win10的启动没有问题。

 
Seric29:

这就是问题所在,没有图片或例子,你可以猜测这些重新分配的意思,如果没有解释的话,如何100%按照开发者的想法使用它。 从这里写的这3行来看,我认为ArrayResize(arr,1000,1000); 创建了一个有2000个元素的数组。但这里并不清楚。如果我做ArrayResize(arr,1,1000); 例如,1000会空转,直到数组到了1000。

或者程序会在超频前使用这个片段,只是将计数器递增。或者这1000块钱只是躺着从CPU上快速获取内存,如果是这样,那么备份内存也要转移,那么没有备份就更容易工作了。一般来说,没有代码,没有信息,没有图片,不知道如何工作。

你不仅应该阅读这三行代码,还应该阅读解释一切的文字,这是很清楚的。

保留内存和阵列大小是不同的概念。如果你用ArrayResize(arr,1000,1000) 覆盖了数组的大小;最后一个数组元素 将是999,而不是更多。但是如果你需要增加阵列的大小,就不会有内存的重新分配。如果你不需要这样的阵列大小的储备,那就把它做得小一点,或者根本就不储备。

 

下午好!
我想把一个参数作为一个数组 放在一个函数 中。 我想不出怎么做才对。你能纠正这个例子吗?

void OnTick()
  {
//---
   int TestArr[]= {5,3,9,4};
   TestFArr(TestArr[]);
  }
//+------------------------------------------------------------------+

void TestFArr(int TestArr[])
  {
   int size=ArraySize(TestArr);
   Print(" --------------- size: ",size);
  }
//+------------------------------------------------------------------+
 
Nauris Zukas:

下午好!
我想把一个参数作为一个数组 放在一个函数 中。我想不出怎么做才对。你能纠正这个例子吗?

void OnTick()
  {
//---
   int TestArr[]= {5,3,9,4};
   TestFArr(TestArr);
  }
//+------------------------------------------------------------------+

void TestFArr(int & TestArr[])
  {
   int size=ArraySize(TestArr);
   Print(" --------------- size: ",size);
  }
//+------------------------------------------------------------------+
 
Artyom Trishkin:

谢谢你!