John W. Kennedy wrote: > It also has to Fixnum.new the result. (And eventually, it has to GC > every intermediate result.) Actually, Fixnums are not allocated, but rather stored within the VALUE itself. From ruby.h: #define FIXNUM_FLAG 0x01 #define INT2FIX(i) ((VALUE)(((long)(i))<<1 | FIXNUM_FLAG)) #define LONG2FIX(i) INT2FIX(i) #define rb_fix_new(v) INT2FIX(v)