前两天写了 快速字符串对象比较 ,我把这个想法提交到 Lua 的邮件列表,建议 Lua 的未来版本去掉长短字符串,不做 string interning ,用这个方法解决字符串比较的性能问题。Lua 的主要维护者 Reberbo 表示了兴趣,同时也提出了几点问题。
其中一个问题是,Lua 未必运行在 64bit 平台上,所以并没有直接使用 64bit 整数类型。我就这个问题考虑了几天,提了好几个解决方案,其中一个方案我最为满意,在这里重新用中文记录一下。
在这个算法下,old id 的自增速度就会大大的减慢。如果 old id 快用完了,这种情况虽然罕见,但出现了还是有方法的。一个确保方案是用一个原子过程,遍历所有的字符串,把所有的 old id 重新排列到 young 区。因为 old 区全部空出来了,这样上面正常的 gc 流程又能正确工作了。
云风大哥,3d引擎啥时候开源?
为什么64位id就能保证id不唯一。
学习了。
是的,应该直接在 old 区重排。
一开始这样设计是因为考虑到整理的工作可能是分步的,就不能在同一个区重排。后来又考虑分步操作有一些复杂因素,就加上了 原子操作 的限定。而如果保证一次做完的话,直接排在 old 区也很简单。
