Project1
标题:
alias会降低脚本效率么?
[打印本页]
作者:
奶油Da蛋糕
时间:
2009-10-18 18:29
标题:
alias会降低脚本效率么?
相比在原有基础上直接修改。alias会降低脚本效率么?意思也就是问,如果给一段脚本反复alias,会不会增加游戏的内存消耗等。
作者:
精灵使者
时间:
2009-10-18 18:36
应该会吧。以前我翻译影子脚本的时候,里面有段代码用alias结果出现了错误——所以我就改回了重写才恢复正常。
alias应该是重命名的意思吧……应该会占用一些内存消耗的
作者:
奶油Da蛋糕
时间:
2009-10-18 18:42
哦,谢谢。
作者:
link006007
时间:
2009-10-19 02:15
本帖最后由 link006007 于 2009-10-19 02:44 编辑
载入脚本和运行时都有性能损失
ruby对脚本的组织是以node来管理的,在ruby解释器读入脚本时,遇到alias,则会查找目标类的原函数,
然后判断alias有效性,无效则抛出异常(如没有原始方法,这回调用print_undef方法),如果有效,则跟新node连接信息,插入符号表,最后调用一次method_added或者singleton_method_added<--这两个是ruby脚本可调用的方法
在运行时.
单纯的C函数调用, 如果一次就可以完成而被迫分成n次,其他不算,至少多了函数的栈操作时间.(当然,对于ruby本身的速度,这个可以忽略不计)
在加上如果被alias旧名函数里有原本不需要的个别步骤,那么消耗性能是必然的了(这个消耗最大)
最后,从ruby脚本的执行来看
ruby解释器通过ruby_exec_internal调用eval_node来运行脚本(其实就是调用ruby的eval函数)
也就是,ruby脚本在执行时,是一个对上述node中保存信息的执行过程,alias增加了整体node(是树)的复杂度,多少也会损失性能吧
以上只是个人理解...欢迎拍砖 有兴趣可以看看eval.c,里面包含ruby的语法结构和大部分主要运行过程
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1