求教!goto内存释放问题
按键精灵吧
全部回复
仅看楼主
level 1
jinzhao134 楼主
在END IF之前 用了GOTO 跳转到IF之前了,那么上一个IF的内存会被释放么?
rem A
if ...then
这有另外的if和执行语句
else ...
goto A
end if
2016年07月14日 11点07分 1
level 9
按键精灵不存在内存溢出的问题,按键精灵的所有变量都是传数据的,甚至栈都没有,甚至你可以看做一个脚本执行器
2016年07月14日 11点07分 2
level 8
if的内存?if是一个控制语句,又没有保存数据,你管他释放不释放?如果你说的是if里的变量,那么所有变量除非你停止了或者手动清0了,否则会一直存在
2016年07月14日 12点07分 3
level 8
内存是自动释放的,你不用管
2016年07月14日 16点07分 4
吧务
level 15
if只是一个过程,需要储存空间
2016年07月15日 01点07分 7
打少一个字,不需要
2016年07月15日 01点07分
level 7
那么for循环里面呢?举个列子:rum 标记 for n if 达到某种条件 then goto 标记 end if end for 假如循环2次 达到了条件去goto跳转 那循环还有n-2次循环等goto跳转n次循环结束后又回到刚才剩的n-2次循环,那么问题来了我在goto跳转中又多次达成goto跳转条件,这种剩余的循环我用内存地址来描述 地址1是第一次剩余的n-2循环 地址2 是第二次达成跳转条件假如是剩余n-3次循环,然后依次类推出现n个地址,这样内存会溢出不?
2022年05月23日 17点05分 8
是ren写错了
2022年05月23日 17点05分
挖坟啊
2022年07月01日 02点07分
@jinzhao134 这么多年了,现在你应该非常精通这方面了吧
2022年07月02日 07点07分
@风–君–扬 啊 没有,很少做这个了 转行了
2024年04月12日 04点04分
level 13
在汇编角度看一个函数的开始
push e
bp

mov ebp,esp esp就是栈指针,把它保存到继存器ebp里面,ebp就变成了这个函数内的栈基址,所有局部变量和参数的访问都通过ebp)
在函数内申请变量是这样的
sub esp,10 这个10表示16进制的10也就是把栈指针抬高16字节,在32位程序中16个字节=4个变量
然后变量的访问
[ebp-4] 第1个变量
[ebp-8] 第2个
[ebp-c] 第3个
[ebp-10] 第4个
函数结束的时候
mov esp,ebp 重新把ebp的值赋结esp,抬高的16字节又回来了
pop ebp 把push 进栈的ebp弹出来,把ESP恢复到进入函数时候的样子,在函数内申请的变量就会全部变成无效数据
ret 返回到函数调用的地方继续执行
2022年05月23日 18点05分 9
他应该是压栈程序走到该命令进栈执行结束的从栈中消失
2022年07月02日 07点07分
level 13
会自动释放的,不用担心内存问题
2022年07月02日 00点07分 10
level 10
咋好多人说不能用goto啊,搞的我都不敢用了,但是确实好用啊,不用嵌套那么多if
2024年04月28日 07点04分 11
不是不能用,是不能乱用,容易出错,简单的脚本GOTO没什么问题
2024年04月28日 14点04分
@aqtswish 哦,只要不跳出函数没事吧?
2024年04月28日 15点04分
1