Оглавление:
Определение - Что означает распределение регистра?
Распределение регистров относится к практике присвоения переменных регистрам, а также к обработке передачи данных в регистры и из них. Распределение регистра может произойти:- На базовом блоке, известном как локальное распределение регистров
- В течение всей функции или процедуры, известной как глобальное распределение регистров
- За границы функций, пересекаемых с помощью графа вызовов, известного как межпроцедурное распределение регистров
Техопедия объясняет распределение регистра
В процессе компиляции компилятор должен определить, каким образом переменные распределяются в небольшой, определенный диапазон регистров. Некоторые из переменных могут не использоваться или считаться «живыми» одновременно. Это приводит к присвоению некоторых регистров нескольким переменным. Тем не менее, никакие две одновременные переменные не могут быть распределены в один и тот же регистр без искажения значения.
Переменные, которые не могут быть выделены для некоторых регистров, должны храниться в ОЗУ и должны загружаться и выгружаться для каждого чтения и записи, соответственно, процедура, известная как разлив. Доступ к регистрам намного быстрее, чем доступ к ОЗУ. Кроме того, это ускоряет время выполнения скомпилированной программы; следовательно, эффективные компиляторы стремятся присвоить регистрам как можно больше переменных.
Как правило, большинство распределителей регистров присваивают каждую переменную основной памяти или регистру центрального процессора (ЦП). Скорость является ключевым преимуществом при использовании регистра. Компьютеры имеют ограниченный диапазон регистров, что означает, что не все доступные переменные могут быть выделены для регистров. Процесс перемещения переменной из регистра в память известен как разлив, тогда как обратная процедура перемещения переменной из памяти в регистр называется заполнением. Интеллектуальное распределение регистров является важным шагом для любых компиляторов.
Существует два типа распределения регистров:
- Выделение локального регистра: это процесс выделения одного базового блока (или гиперблока или суперблока) за раз. Выделение локального регистра повышает скорость.
- Глобальное распределение регистров: если использование регистров плохо с использованием локального распределения, важно использовать глобальное распределение регистров. При простом глобальном распределении регистров наиболее активные значения распределяются в каждом внутреннем цикле. При полном распределении глобальных регистров используется процедура для определения текущих диапазонов на графике потока управления, назначения текущих диапазонов, а также разделения диапазонов по мере необходимости.
