1.6.1 局部变量-MQL5编程参考文档-峰汇在线
诚信为本
量力而为
当前位置:峰汇在线 > MQL语言 > MQL5编程参考文档 > 正文

1.6.1 局部变量

本文目录

在函数内可变量的声明是局部的。局部变量在声明的部分里是被限定的。局部变量可以由任意一个表达式结果初始化。 每次函数的运行只可以初始化一个局部变量。局部变量储存在相应的存储器上。

示例:

int somefunc() 
{ 
int ret_code=0; 
... 
return(ret_code); 
}

变量范围是涉及变量的模块部分。模块中声明的变量(内部),有模块规定其范围。变量声明启动模块范围,以终止程序结束。

开始函数声明的局部变量也有模块范围,和局部变量函数参数。任何模块都可以包括变量声明。如果嵌入模块内外模块有同名标识符,隐藏外部指标,直到内部操作完成。

示例:

void OnStart() 
{ 
//--- 
int i=5; // 函数的局部变量 
{ 
int i=10; // 函数变量 
Print("In block i = ",i); // 结果是 i=10; 
} 
Print("Outside block i = ",i); // 结果是 i=5; 
}

这意味着内部模块运行时,只看到自己的局部指标值,看不到外部同名指标值。

示例:

void OnStart() 
{ 
//--- 
int i=5; // 函数局部变量 
for(int i=0;i<3;i++) 
Print("Inside for i = ",i); 
Print("Outside the block i = ",i); 
} 
/* Execution result 
Inside for i = 0 
Inside for i = 1 
Inside for i = 2 
Outside block i = 5 
*/

即使从启动模块就存在,公开静态局部变量仍有模块范围。

存储栈

在每个MQL5程序中,称为存储栈的特殊内存区被分配存储自动创建的局部函数变量。一个存储栈可以分配给全部函数,指标的默认大小等于1Mb。在EA交易和脚本中,存储栈大小都可以使用#property stacksize编译指令(以字节设定存储栈大小)来管理, 默认情况下,为存储栈分配8Mb内存。

静态局部变量存储在与其他静态和全局变量存储的相同的地方 – 特殊的内存区域 ,它是独立于存储栈的存在。动态创建的变量也使用独立于存储栈的内存区域。

随着每个函数的调用,存储栈上的区域分配给内部非静态变量。退出函数后,内存可再次提供使用。

如果从第一个函数调用第二个,然后第二个函数从剩下的栈内存占据变量所需的大小。因此,当使用包含函数时,每个函数将会连续占据栈内存。这可能会导致一个函数调用期间的内存不足,这种情况被称为存储栈溢出。

因此,对于大型本地数据,您应该更好地利用动态内存 – 当进入一个函数时,分配本地所需的内存,在系统(new, ArrayResize()),和退出函数时,释放内存(delete,ArrayFree())。

打赏
版权所有转载请注明标题及链接:峰汇在线 » 1.6.1 局部变量
上一篇:
下一篇:
分享到: 更多 (0)

如您觉得此文不错请扫码打赏!

支付宝扫一扫打赏

微信扫一扫打赏