Размещение числовых данных в памяти

В современных ЭВМ разрядность одной ячейки памяти, как правило, равна одному байту (8 бит). В то же время реальная длина кодов чисел составляет 2, 4, 8 или 16 байт. При хранении таких чисел в памяти последовательные байты числа размещают в нескольких ячейках с последовательными адресами, при этом для доступа к числу указывается только наименьший из адресов. При разработке архитектуры системы команд необходимо определить порядок размещения байтов в памяти, то есть какому из байтов (старшему или младшему) будет соответствовать этот наименьший адрес. На рисунке 2.22 показаны оба варианта размещения 32-разрядного числа в четырех последовательных ячейках памяти, начиная с адреса X.

 

Рисунок 2.22 – Варианты размещения 32-разрядного числа

 

В вычислительном плане оба способа записи равноценны. Так, фирмы DEC и Intel отдают предпочтения размещению в первой ячейке младшего байта, a IBM и Motorola ориентируются на противоположный вариант. Выбор обычно связан с некими иными соображениями разработчиков ЭВМ. В настоящее время в большинстве машин предусматривается использование обоих вариантов, причем выбор может быть произведен программным путем за счет соответствующей установки регистра конфигурации.

Помимо порядка размещения байтов, существенным бывает и выбор адреса, с которого может начинаться запись числа. Связано это с физической реализацией полупроводниковых запоминающих устройств, где обычно предусматривается возможность считывания (записи) четырех байтов подряд. Причем данная операция выполняется быстрее, если адрес первого байта А отвечает условию A mod S = 0,S= 2, 4, 8, 16. Числа, размешенные в памяти в соответствии с этим правилом, называются выровненными. Большинство компиляторов генерируют код, в котором предусмотрено выравнивание чисел в памяти,