Предоставляет ли Ruby все в куче или есть ли какие-либо экземпляры, где что-то хранится в стеке? У меня создается впечатление, что все переменные по существу находятся в стеке и содержат прозрачную ссылку на объект в куче. Правильно ли я в этом мышлении? Является ли эта реализация конкретной?
Кроме того, если это так, что переменные выделяются в стеке и содержат только скрытые указатели, сколько байтов используют сами переменные (без учета объектов, на которые они указывают)?
Edit:
Этот вопрос был задан, потому что я пытался выяснить, будет ли ограничение на стек оптоволокна 4kB проблемой в этом вопросе. Кажется, что (с MRI 1.9.3), что каждая переменная сама потребляет один байт, и есть небольшая служебная информация, связанная с волокном, которая уменьшает доступный размер стека на несколько байтов.
Этот код не будет выполнен на 4045-й итерации:
count = 0
loop do
count += 1
puts count
varlist = String.new
count.times do |i|
varlist += "a#{i} = 1\n"
end
s = "fiber = Fiber.new do \n #{varlist} \n end \n fiber.resume"
eval(s)
end