Potential for future improvement: st_table and st_table_entry are both 48 bytes on 64-bit. That means those allocations may use 64-byte object slots and avoid going through normal malloc. AFAIK, glibc malloc (and probably other allocators) can have around 2 words internal overhead, even, so we can avoid that overhead by using Ruby object slots for those.