Независимо от того, какое количество регистров вы выберете, у вас, вероятно, будет слишком много для большинства подпрограмм и слишком мало для нескольких подпрограмм.(Это всего лишь предположение. Однако, учитывая, сколько вещей в программировании следует распределению степенных законов - входящие ссылки на объекты, модули, классы, исходящие ссылки из объектов, модулей, классов, цикломатическая сложность подпрограмм, сложность подпрограмм NPath, SLOCдлина подпрограмм, время жизни объектов, размер объектов - разумно предположить, что то же самое верно для количества регистров для подпрограммы, особенно если вы считаете, что, вероятно, существует корреляция между сложностью / длиной и количеством регистров.)
Виртуальная машина Parrot нашла довольно простой выход из этой головоломки: у них есть бесконечное количество регистров.Очевидно, что эти регистры не хранятся в бесконечном массиве, скорее, они лениво материализуют достаточно регистров для любой отдельной подпрограммы.Таким образом, они никогда не исчерпывают регистры и никогда не тратят место.