Хэши всегда выделяются кучей.
В Crystal это зависит от того, относится ли объект к типу Reference
или Value
. Все объекты, которые наследуются от Reference
, всегда размещаются в куче.
Ага sh определяется как class Hash(K, V)
. Поскольку класс всегда наследуется от Reference
, хэши будут всегда выделяться кучей.
Типы значений, такие как struct Int32
, где желательно выделение стека, должны быть определены как структуры, поэтому они наследуется не от Reference
, а от Value
.