Bug #3899

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

Added by metanest (Makoto Kishimoto) over 1 year ago. Updated about 1 year ago.

Status:Rejected Start date:10/03/2010
Priority:Low Due date:
Assignee:- % Done:

0%

Category:core
Target version:2.0.0
ruby -v:ruby 1.9.3dev (2010-08-31 trunk 29154) [i686-linux]

Description

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) が起きる。

History

Updated by nobu (Nobuyoshi Nakada) over 1 year ago

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

Also available in: Atom PDF