3

Ruby構造体は、軽量のデータ コンテナーを定義する便利な方法です。私の質問は、それらが通常のオブジェクトと同じようにヒープに割り当てられるか、スタックに割り当てられるかです (たとえば、C# の値の型のように)。それらがヒープに割り当てられている場合、Ruby 構造体のパフォーマンス上の利点 (または落とし穴) はありますか。

4

1 に答える 1

4

C# の値の型はスタックに割り当てられません。スタックに割り当てられる場合もあれば、そうでない場合もあります。これらは、値型のローカル値を宣言するとスタックに割り当てられますが、値型のクラス インスタンス フィールドを宣言するとスタックに割り当てられません。

Ruby 構造体は通常の Ruby クラスであり、構造体クラスのインスタンスは、他のクラスのインスタンスと同様にヒープに割り当てられます。値型である Ruby 型はFalseClass、、、、、TrueClassおよびのみNilClassです。ただし、インスタンスはシンボル テーブルでグローバルに割り当てられると同時に、値の型である必要があるため、特殊です。FixnumSymbolSymbol

于 2012-11-06T13:53:53.907 に答える