Bug #3899

32 ビットマシンにおいて、symbol table overflow (RuntimeError) が 2Mi 個のシンボルで起きる

Added by Makoto Kishimoto over 4 years ago. Updated almost 4 years ago.

Status:Rejected
Priority:Low
Assignee:-
ruby -v:ruby 1.9.3dev (2010-08-31 trunk 29154) [i686-linux] Backport:

Description

=begin
32 ビットマシンにおいて、
gc.c の rb_obj_id のコメントには、

  *  symbol  ssssssssssssssssssssssss00001110

  *  symbol   000SSSSSSSSSSSSSSSSSSSSSSSSSSS0        S...S % A = 4 (S...S = s...s * A + 4)

とあり、symbol のための id = hash のための空間は 24bit すなわち 16Mi 個ぶんあるはずなのに、2Mi 個超のシンボルを作ろうとすると、symbol table overflow (RuntimeError) が起きる。
=end

History

#1 Updated by Nobuyoshi Nakada over 4 years ago

  • Status changed from Open to Rejected

=begin
IDの最下位3ビットは、ローカル変数やメソッド名、定数名、インスタンス変数名、クラス変数名、グローバル変数名などの、シンボルの分類のために使われています。
したがって、異なる名前のシンボルとしてはID全体の1/8しか作ることはできません。
=end

Also available in: Atom PDF