ruby – 对象内存分配
我想知道
Ruby中的内存分配是如何工作的.
在Ruby中,我们可以打开一个类定义并添加更多的实例变量/方法.在这种情况下,新对象比现有实例需要更多内存.它如何在内部跟踪分配给实例的内存? 例如,我们有以下类定义: class MyClass def myMethod @a = 5 end end 我们创建了一个MyClass实例: m = MyClass.new m.myMethod 此时,m将被分配一些内存.现在,我们打开类定义并添加另一个实例变量b. class MyClass def mySecondMethod @b = 5 end end 这个新方法mySecondMethod和实例变量b也可以在Myclass的现有实例m中使用. 调用mySecondMethod实例化并初始化b: m.mySecondMethod Ruby如何内部管理内存?它是否重新分配内存块(例如m),还是维护某些指向新分配内存的指针? 解决方法
答案取决于实际的实施.在这里,我假设你问的是
MRI.
Ruby对象在heap上分配.在谈论对象分配时,没有stack的概念. 堆被分成页面,每页包含16kb.每个页面都被分成固定大小的插槽,可以容纳Ruby对象.一个页面可以容纳~408个对象,因为每个对象(它是一个 所有这些都由VM管理(即YARV). 来源:http://timetobleed.com/garbage-collection-slides-from-la-ruby-conference/ 关于您的示例,变量只保存对象的引用,因此m实际上指向已分配的MyClass对象. 在内部备份MyClass的C结构(RClass)包含一个指向表的指针,该表具有用户定义的方法,如#mySecondMethod和指向表的指针,该表具有其对象具有的实例变量的名称. 每个对象(自 由于语言的动态特性以及方法查找在运行时发生的事实,新定义的#mySecondMethod可用. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |