Хэши когда-нибудь в стеке в Crystal lang? - PullRequest
1 голос
/ 19 февраля 2020

На языке Crystal хэши когда-либо размещаются в стеке? Или они всегда «нагромождены»? Я ничего не смог найти в документах (https://crystal-lang.org/api/0.33.0/Hash.html - посмотрел 19 февраля 2020 г.). Я вижу довольно много malloc_* в https://github.com/crystal-lang/crystal/blob/master/src/hash.cr, но не был уверен, была ли оптимизация, которую я пропустил. Я не думаю, что в документах это прозвучало явно - в браузере было найдено слово для поиска «heap», «stack» и «allocate» на https://crystal-lang.org/api/0.33.0/Hash.html ... не удалось найти ничего.

1 Ответ

1 голос
/ 23 февраля 2020

Хэши всегда выделяются кучей.

В Crystal это зависит от того, относится ли объект к типу Reference или Value. Все объекты, которые наследуются от Reference, всегда размещаются в куче.

Ага sh определяется как class Hash(K, V). Поскольку класс всегда наследуется от Reference, хэши будут всегда выделяться кучей.

Типы значений, такие как struct Int32, где желательно выделение стека, должны быть определены как структуры, поэтому они наследуется не от Reference, а от Value.

...