gpt4 book ai didi

ruby - 调用 ObjectSpace.count_objects 时哈希键的含义是什么?

转载 作者:数据小太阳 更新时间:2023-10-29 06:54:34 25 4
gpt4 key购买 nike

在 Ruby 1.9 (YARV) 中,您可以获得所有当前已分配对象的计数,如下所示:

ObjectSpace.count_objects

它返回一个像这样的散列

{:TOTAL=>1226560, :FREE=>244204, :T_OBJECT=>26141, :T_CLASS=>9819, :T_MODULE=>1420, :T_FLOAT=>287,
:T_STRING=>260476, :T_REGEXP=>4081, :T_ARRAY=>72269, :T_HASH=>14923, :T_STRUCT=>4601, :T_BIGNUM=>7,
:T_FILE=>16, :T_DATA=>54553, :T_MATCH=>5, :T_COMPLEX=>1, :T_RATIONAL=>15, :T_NODE=>524818,
:T_ICLASS=>8924}

这些哈希键的含义是什么?有些像 T_STRING 和 T_FILE 是显而易见的。我对 :FREE、:T_ICLASS、:T_DATA 和 :T_NODE 特别感兴趣。

最佳答案

只是一个猜测:我假设 :T_ICLASS 计数 include classes:T_NODE 可能代表 AST 节点.

这是一个完整列表(遗憾的是没有评论):

#define T_NONE   RUBY_T_NONE
#define T_NIL RUBY_T_NIL
#define T_OBJECT RUBY_T_OBJECT
#define T_CLASS RUBY_T_CLASS
#define T_ICLASS RUBY_T_ICLASS
#define T_MODULE RUBY_T_MODULE
#define T_FLOAT RUBY_T_FLOAT
#define T_STRING RUBY_T_STRING
#define T_REGEXP RUBY_T_REGEXP
#define T_ARRAY RUBY_T_ARRAY
#define T_HASH RUBY_T_HASH
#define T_STRUCT RUBY_T_STRUCT
#define T_BIGNUM RUBY_T_BIGNUM
#define T_FILE RUBY_T_FILE
#define T_FIXNUM RUBY_T_FIXNUM
#define T_TRUE RUBY_T_TRUE
#define T_FALSE RUBY_T_FALSE
#define T_DATA RUBY_T_DATA
#define T_MATCH RUBY_T_MATCH
#define T_SYMBOL RUBY_T_SYMBOL
#define T_RATIONAL RUBY_T_RATIONAL
#define T_COMPLEX RUBY_T_COMPLEX
#define T_UNDEF RUBY_T_UNDEF
#define T_NODE RUBY_T_NODE
#define T_ZOMBIE RUBY_T_ZOMBIE
#define T_MASK RUBY_T_MASK

RUBY_T​​_xyz 枚举定义如下:

enum ruby_value_type {
RUBY_T_NONE = 0x00,

RUBY_T_OBJECT = 0x01,
RUBY_T_CLASS = 0x02,
RUBY_T_MODULE = 0x03,
RUBY_T_FLOAT = 0x04,
RUBY_T_STRING = 0x05,
RUBY_T_REGEXP = 0x06,
RUBY_T_ARRAY = 0x07,
RUBY_T_HASH = 0x08,
RUBY_T_STRUCT = 0x09,
RUBY_T_BIGNUM = 0x0a,
RUBY_T_FILE = 0x0b,
RUBY_T_DATA = 0x0c,
RUBY_T_MATCH = 0x0d,
RUBY_T_COMPLEX = 0x0e,
RUBY_T_RATIONAL = 0x0f,

RUBY_T_NIL = 0x11,
RUBY_T_TRUE = 0x12,
RUBY_T_FALSE = 0x13,
RUBY_T_SYMBOL = 0x14,
RUBY_T_FIXNUM = 0x15,

RUBY_T_UNDEF = 0x1b,
RUBY_T_NODE = 0x1c,
RUBY_T_ICLASS = 0x1d,
RUBY_T_ZOMBIE = 0x1e,

RUBY_T_MASK = 0x1f
};

我认为其中大部分都相当明显。我唯一想不通的是 T_DATA(参见@banister 的评论)、T_ZOMBIET_MASK

顺便说一句:请注意,这些不是Ruby 1.9 的一部分。它们是 YARV 的一部分。它们在 Ruby 1.9 的其他实现上可能完全不同,甚至根本不存在。文档明确指出:

The contents of the returned hash is implementation defined. It may be changed in future.

事实上,甚至不能保证方法本身存在:

This method is not expected to work except C Ruby.

(作者大概的意思是该方法只能保证在MRI和YARV上有效。)

关于ruby - 调用 ObjectSpace.count_objects 时哈希键的含义是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3789929/

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