0

当我运行一个 ruby​​ 程序时,我假设变量存储在 RAM 中。除了由于缺少 RAM 而需要分页时,它们是否会存储在硬盘上?我认为堆栈和堆是相关的,我找不到任何关于 ruby​​ 存储变量的确切信息。

4

3 回答 3

1

Ruby 语言规范不强制或禁止任何特定的存储策略。任何实现都可以以任何方式自由地将值存储在他们想要的任何地方。规范只说明了运行 Ruby 程序的结果应该是什么,而不是程序是如何运行的。(就像任何其他语言规范一样。)

例如,在SmallRuby中,对象可能在某些情况下存储在磁盘上。MagLev的全部目的是拥有一个 Ruby 实现,通过将它们存储在磁盘上的分布式集群中,可以处理比 RAM 大几个数量级的堆。

于 2013-11-13T10:33:26.593 回答
0

简短的回答是希望不是。但很长的答案是,是的,在某些时候如果机器内存不足,Ruby 的变量将不得不进入磁盘。

但是,要回答您的确切问题:不,Ruby 本身从不将变量放入硬盘驱动器(据我所知),但在某些时候操作系统会释放 Ruby 的内存并将其发送到磁盘。

更有趣的是,您可以将 ruby​​ 变量存储在磁盘上的 YAML 文件(另一种标记语言)中,.yml. 因此,如果您尝试使用 Ruby 将复杂对象存储在数据库中,则可以使用文本列,然后将其合成以实例化为给定类的新对象。

于 2013-11-13T05:43:48.547 回答
0

这个答案是指标准的 MRI/YARV Ruby 实现。

与任何其他进程一样,运行中的 Ruby 程序的内存由操作系统控制。如果某些其他进程需要更多内存,操作系统将尝试找到它。如果没有空闲 RAM,操作系统可能需要在硬盘驱动器上临时存储或分页另一个进程(可能是您的 Ruby 程序)的 RAM。当您的程序再次运行时,它将恢复到 RAM。

重要的是要注意这完全由操作系统控制——Ruby 永远不会真正知道它的内存是否被分页。

于 2013-11-13T07:55:03.087 回答