Bug #3899
32 ビットマシンにおいて、symbol table overflow (RuntimeError) が 2Mi 個のシンボルで起きる
| 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しか作ることはできません。