作者热门文章
- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我注意到对象的 ID 分配方式有悖常理。一个对象创建得越早,它的对象 ID 就越大。我原以为它们会按升序分配,而不是相反。
例如:
obj1 = Object.new
obj2 = Object.new
obj3 = Object.new
p obj1.object_id # => 4806560
p obj2.object_id # => 4806540
p obj3.object_id # => 4806520
为什么它们以这样的方式分配,为什么在 Ruby 解释器运行的代码中步长为 20,而不是 1,但在 Ruby 的 irb 运行的代码中,对象 ID 之间的差异要大得多?
最佳答案
经过许多细节,ruby 分配了一 block 堆来放置对象:
1 | 2 | 3 | 4 | 5
然后按顺序遍历它们并将它们添加到空闲对象的链表中。这导致它们在链表上的顺序相反:
freelist → NULL
freelist → 1 → NULL
freelist → 2 → 1 → NULL
freelist → 3 → 2 → 1 → NULL
freelist → 4 → 3 → 2 → 1 → NULL
freelist → 5 → 4 → 3 → 2 → 1 → NULL
分配对象时,ruby 使用链表中的第一项:
object = freelist
freelist = object.next_free
所以自由列表现在看起来像:
freelist → 4 → 3 → 2 → 1 → NULL
并且进一步分配的对象将在小分配中以相反的顺序出现。
当 ruby 需要分配一个新的堆 block 来存储更多对象时,您会看到 object_id 跳起来然后再次下降。
关于ruby - 为什么 Ruby 倾向于按降序分配对象 ID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10423406/
序 大家好呀,我是summo,这次来写写我在上班空闲(摸鱼)的时候做的一个小网站的事。去年阿里云不是推出了个活动嘛,2核2G的云服务器一年只要99块钱,懂行的人应该知道这个价格在业界已经是非常良心了
我尝试根据给定的级别顺序(BFS 顺序)构造 BST。我知道这是可能的,但我不知道我该怎么写。问题是我必须使用 BFS 序列。所以,我不能在这里使用递归,我必须迭代地编写我的程序......我发现这有
我是一名优秀的程序员,十分优秀!