Плотность кода (машинный код)

Плотность кода (англ. Code density) — показатель, характеризующий, какой объём памяти занимает программный код, выполняющий некую задачу[1]. Не существует способов однозначно измерить величину плотности кода, так как разные задачи могут требовать различных наборов инструкций. Для оценки и сравнения плотности кода используются различные бенчмарки, как правило заключающиеся в компиляции эталонного кода с языка высокого уровня[2].

Значение плотности кода

В ранних компьютерных системах плотность машинного кода имела большое значение по причине ограниченного объёма памяти. Однако по мере развития микроэлектроники и общего удешевления компьютерной памяти, размер, который занимает программа в памяти, стал не настолько важным фактором. Однако более рыхлый код может привести к снижению производительности при недостаточной пропускной способности подсистемы памяти и объёма процессорного кэша[2].

Факторы, влияющие на плотность кода

Плотность кода часто рассматривается как характеристика микроархитектуры процессора, но на неё также оказывает влияние оптимизация при компиляции[2]. Следующие факторы оказывают наибольшее влияние на плотность кода[3]:

  • Размер инструкции, а также все факторы, которые на него влияют: разрядность (в случае если разрядность совпадает с размером инструкции), количество регистров общего назначения и т. д. В некоторых процессорах может использоваться переменный размер команд: простые и частоиспользуемые команды меньшей длины, более редкие — большей;
  • Схемы адресации;
  • Разрядность также влияет на плотность кода сама по себе;
  • Наличие микрокода и его сложность;
  • Необходимость в выравнивании.

Как правило, код для RISC-процессоров обладает меньшей плотностью, чем CISC. Некоторые RISC-архитектуры, например, ARM включают в себя специальные средства для увеличения плотности кода, такие как режим Thumb в процессорах ARM[4].

Примечания

  1. Definition: code density (англ.). ComputerLanguage.com. Дата обращения: 29 августа 2020. Архивировано 26 сентября 2020 года.
  2. 1 2 3 Weaver, 2009, p. 459.
  3. Weaver, 2009, p. 461.
  4. Andrew N. Sloss, Dominic Symes, Chris Wright. ARM System Developer’s Guide: Designing and Optimizing System Software. — Morgan Kaufmann. — P. 15. — ISBN 1-55860-874-5.

Литература