展开查看
以下是引用自控龙龙在2015-03-13 17:41:48的发言 >8楼:那么如果我用ob1调用FC1,FC1中使用了临时变量lw8,这个LW8和OB1中的lw8是一个吗?
是一个,也就是相当于lw8是一间房子或一个柜子,再fc1中可以存其它东西,但返回到ob1中时,系统自动将该位置放了规定的内容。
不是同一个。
因为“L 堆栈永远以地址0开始。”
所以虽然在FC1里写LW8但实际上是指的FC1所占有的本地堆栈区的第8个字而已,不是OB1的LW8.
例如,OB1占用20个字节,那么FC1的LW8就等于OB1的LW28。
延伸一下:
如OB1占用20字节,FC1占用30字节,FC2占用50字节。
1、OB1调用FC1,FC1调用FC2
那么OB1的本地堆栈区中OB1占用LB0~LB19,FC1占用LB20~LB49,FC2占用LB50~LB99
2、OB1调用完FC1,再由OB1调用FC2
那么OB1的本地堆栈区中OB1占用LB0~LB19,FC1占用LB20~LB49,FC2占用LB20~LB79
因为FC1执行完就把地址释放了。