查看: 1330|回复: 3

[已经解决] alias会降低脚本效率么?

  [复制链接]

℃ake

梦石
0
星屑
50
在线时间
8 小时
注册时间
2009-6-6
回帖
670
发表于 2009-10-18 18:29:27 | 显示全部楼层 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有账号?注册会员

×
相比在原有基础上直接修改。alias会降低脚本效率么?意思也就是问,如果给一段脚本反复alias,会不会增加游戏的内存消耗等。
我爱66RPG,但我讨厌66.

精灵族の天使<

梦石
0
星屑
1712
在线时间
3039 小时
注册时间
2007-3-16
回帖
33092

开拓者贵宾

发表于 2009-10-18 18:36:24 | 显示全部楼层
应该会吧。以前我翻译影子脚本的时候,里面有段代码用alias结果出现了错误——所以我就改回了重写才恢复正常。
alias应该是重命名的意思吧……应该会占用一些内存消耗的
回复

使用道具 举报

℃ake

梦石
0
星屑
50
在线时间
8 小时
注册时间
2009-6-6
回帖
670
 楼主| 发表于 2009-10-18 18:42:49 | 显示全部楼层
哦,谢谢。
回复

使用道具 举报

风之塞尔达

梦石
0
星屑
50
在线时间
57 小时
注册时间
2005-10-22
回帖
2437

贵宾

发表于 2009-10-19 02:15:38 | 显示全部楼层
本帖最后由 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的语法结构和大部分主要运行过程
在程序里延续塞尔达的传说, 在画板上勾勒塞尔达的轮廓!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部