Плотность кода (англ. Code density) — показатель, характеризующий, какой объём памяти занимает программный код, выполняющий некую задачу[1]. Не существует способов однозначно измерить величину плотности кода, так как разные задачи могут требовать различных наборов инструкций. Для оценки и сравнения плотности кода используются различные бенчмарки, как правило заключающиеся в компиляции эталонного кода с языка высокого уровня[2].
Значение плотности кода
В ранних компьютерных системах плотность машинного кода имела большое значение по причине ограниченного объёма памяти. Однако по мере развития микроэлектроники и общего удешевления компьютерной памяти, размер, который занимает программа в памяти, стал не настолько важным фактором. Однако более рыхлый код может привести к снижению производительности при недостаточной пропускной способности подсистемы памяти и объёма процессорного кэша[2].
Факторы, влияющие на плотность кода
Плотность кода часто рассматривается как характеристика микроархитектуры процессора, но на неё также оказывает влияние оптимизация при компиляции[2]. Следующие факторы оказывают наибольшее влияние на плотность кода[3]:
- Размер инструкции, а также все факторы, которые на него влияют: разрядность (в случае если разрядность совпадает с размером инструкции), количество регистров общего назначения и т. д. В некоторых процессорах может использоваться переменный размер команд: простые и частоиспользуемые команды меньшей длины, более редкие — большей;
- Схемы адресации;
- Разрядность также влияет на плотность кода сама по себе;
- Наличие микрокода и его сложность;
- Необходимость в выравнивании.
Как правило, код для RISC-процессоров обладает меньшей плотностью, чем CISC. Некоторые RISC-архитектуры, например, ARM включают в себя специальные средства для увеличения плотности кода, такие как режим Thumb в процессорах ARM[4].
Примечания
Литература