gpt4 book ai didi

ruby-on-rails - 如何计算或查找 ruby​​ 中变量占用的存储空间?

转载 作者:太空宇宙 更新时间:2023-11-03 17:43:27 26 4
gpt4 key购买 nike

来自示例 ruby​​ 代码,例如:

a = 0.0
a = nil

现在,我想知道变量“a”在其值为“0.0”时以及在其值为“nil”时占用了多少存储空间。谢谢。

最佳答案

据我所知,最接近现实的方法是使用操作系统的内存报告。以下可能仅适用于 MRI。

▶ def report
▷ puts 'Memory ' + `ps ax -o pid,rss | grep -E "^[[:space:]]*#{$$}"`.
▷ strip.split.map(&:to_i)[1].to_s + 'KB'
▷ end
▶ report
#⇒ Memory 90276KB
▶ a = nil && report
#⇒ Memory 90712KB
▶ a = nil && report
#⇒ Memory 90712KB NB!!! NOT CHANGED!
▶ a = "a" && report
#⇒ Memory 90908KB
▶ a = "a" && report
#⇒ Memory 91096KB NB!!! CHANGED!!
▶ a = "a" && report
#⇒ Memory 91388KB NB!!! CHANGED!!
▶ ObjectSpace.garbage_collect && report
#⇒ Memory 91512KB NB!!! INCREASED!!!

也就是说,无法确定对象需要多少空间。消耗的内存量将是以下各项的总和:

  • 在堆中分配的内存量
  • RValue 需要声明变量
  • ruby 内部内存分配器,负责处理 Ruby 堆(以及它们操作的堆)

后者是不可预测的,无法根据数据大小进行预测/计算。当有足够数量的 Ruby 插槽时,短字符串可能需要零字节。

请注意,RValue 分配在所谓的 Ruby 堆中,并且此内存永远不会返回给操作系统。从不意味着永远不会。

关于ruby-on-rails - 如何计算或查找 ruby​​ 中变量占用的存储空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48277425/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com