Встроенный тип данных с размером менее 1 байта - PullRequest
1 голос
/ 03 ноября 2011

У большинства строго типизированных языков программирования есть типы данных мин. 1 байт в размере. Я знаю, что можно получить доступ к отдельным ячейкам памяти с помощью битовой маскировки, но почему языки программирования не поддерживают тип данных менее 1 байта?

1 Ответ

1 голос
/ 03 ноября 2011

Для языков, которые вообще имеют ручное управление памятью / манипулирование адресами, аппаратное обеспечение диктует некоторые ограничения для этих функций.Очень немногие, если таковые имеются, архитектуры поддерживают адресацию одного бита.Как правило, наименьшая единица хранения - это байт, поэтому они используют ее.

Чтобы все адреса ссылались на биты, либо требуется представление адреса большего, чем в среднем (снижение производительности - вдвое больше инструкций для всего, что касается адресов) или значительно ограничить доступное адресное пространство.Добавление особого случая (и особого вида адреса) усложняет язык для чего-то, что редко требуется (обратите внимание, что C имеет связанную, но ИМХО более общую версию: битовые поля в структурах - структуры все еще имеют sizeof, измеренный в байтах,но структура, состоящая из 8 элементов, может иметь общий размер в один байт).Операторы с битовой привязкой, которые в любом случае включены, позволяют эмулировать его в пользовательском коде.

В языках более высокого уровня, в которых вообще отсутствует понятие адресации, размер является деталью реализации.Реализация, конечно (прямо или косвенно), опять-таки на языках более низкого уровня, которые по умолчанию используют байты вместо битов.Это, а также другие требования и ограничения (например, к объектам нужно обращаться через указатели), делают нецелесообразным в целом (хотя и существует, например, BitVector for Python ) выставление трюков типа «использовать машинное слово,затем индексировать биты путем сдвига / маскирования "для реализованного языка.

...