Что такое байт согласно C11?


person Vorac    schedule 26.04.2013    source источник


Ответы (3)


Технически вы правы, это говорит о том, что соответствующая реализация C должна иметь память с байтовой адресацией. Но стандарт C не требует, чтобы байт имел только восемь бит. Реализация может определить «байт» как 64-битный, и это просто замечательно, если говорить о стандарте. Стандарт также не требует, чтобы «байтовая адресация» была одной операцией, поэтому 8-битные байты на процессоре, который поддерживает только 64-битное чтение, все еще могут быть действительными, если компилятор гарантирует, что требуемое маскирование и сдвиг выполняются. чтобы получить правильный результат.

person Community    schedule 26.04.2013
comment
Все три ответа хороши и уточняют. Так что я принимаю наибольшее количество голосов. Но что такое базовый набор символов? Кажется, это не определено там? - person Vorac; 26.04.2013
comment
@Vorac Есть базовый исходный набор символов и базовый набор символов выполнения. Имеется в виду базовый набор символов выполнения, он определен в 5.2.1. - person ; 26.04.2013

Да, я думаю, что вы неправильно читаете стандарт. Я думаю, что там написано (перефразируя):

наименьшая единица памяти с индивидуальной адресацией, которая может содержать член базового набора символов (...), называется байтом

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

person High Performance Mark    schedule 26.04.2013

Да, проще говоря:
Согласно стандарту, байт — это наименьшая адресуемая ячейка памяти.

person Alok Save    schedule 26.04.2013
comment
Нет, я думаю, что стандарт допускает, чтобы байты были больше, чем наименьшая адресуемая ячейка памяти. - person Philipp Wendler; 26.04.2013
comment
@PhilippWendler: Почему? И если не байт, то как вы думаете, что является наименьшей адресной ячейкой памяти? - person Alok Save; 26.04.2013
comment
Стандарт определяет два требования к байту: достаточно большой для базового набора символов и адресуемая память. В системе, где для базового набора символов требуется 16 бит, но адресуются единицы из 8 бит, байт должен быть 16-битным IMO. - person Philipp Wendler; 26.04.2013
comment
Я согласен с @PhilippWendler: в стандарте четко указано, что байт должен быть достаточно большим, чтобы содержать любой элемент базового набора символов. Если эта единица памяти больше, чем наименьшая единица памяти, которая может быть индивидуально адресована, то стандарт говорит, что byte больше, чем эта индивидуально адресуемая единица памяти. Представьте себе базовый набор символов, требующий 12 бит для представления каждого символа, реализованного на машине с индивидуально адресуемыми блоками памяти по 8 бит каждый. - person High Performance Mark; 26.04.2013
comment
Это наименьшая единица памяти, адресуемая из C. Любое понятие адресации с использованием другого языка (например, набора инструкций ЦП) совершенно не имеет отношения к определению в стандарте C. Конечно, это имеет отношение к человеку, пишущему компилятор, так как он должен выдавать некоторые коды операций, поэтому он может выбрать размер байта, который удобен для ЦП. Стандарту все равно, удобно это или нет. - person Steve Jessop; 26.04.2013
comment
Существуют процессоры (в первую очередь предназначенные для графики), в которых все адреса являются битовыми. Если бы кто-то использовал нестандартные средства для создания указателя *p на третий бит байта, то запись в p изменила бы пять битов одного байта и три бита другого. Несмотря на то, что процессор рассматривает память как адресуемую по битам, не существует средства, определенного в спецификации языка C, с помощью которого код мог бы создать указатель, не выровненный по границе байта. - person supercat; 23.06.2015