В чем разница в определении байта в терминах компьютерной памяти и с точки зрения С++?
Это со ссылкой на текст из С++ Primer Plus от Stephen Prata -
Байт означает 8-разрядную единицу памяти в смысле единицы измерения, которая описывает объем памяти в компьютере.
Однако С++ определяет байты по-разному. Байт С++ состоит из, по меньшей мере, достаточно смежных битов для размещения базового набора символов для реализации.
Можете ли вы объяснить, если компилятор С++ имеет 16-разрядный байт, тогда как система имеет 8-битный байт, то как будет работать программа в такой системе?
Ответы
Ответ 1
То, что автор хочет сказать о размере байта, состоит в том, что, цитируя Wikipedia:
Популярность крупных коммерческих вычислительных архитектур способствовала повсеместному принятию 8-битного размера.
С другой стороны, единица памяти в С++ задается встроенным типом char
; при некоторой реализации, char
может не быть 8-разрядным блоком памяти; хотя в вашей программе на С++ каждый sizeof(T)
будет выражаться в кратных sizeof(char)
, который по определению равен 1
.
Число бит в байте для конкретной реализации записывается в макрос CHAR_BIT
, определенный внутри стандартного заголовка <climits>
, Гарантируется, что char
не менее 8 бит.
Наконец, это определение байта, заданного стандартом С++ (§1.7, intro.memory):
Основным блоком памяти в модели памяти С++ является байт. Байт, по крайней мере, достаточно большой, чтобы содержать любой член базового набора символов (2.3) и восьмибитовых кодовых блоков Unicode UTF-8 кодирующую форму и состоит из непрерывной последовательности бит, число которой определяется реализацией. Наименее значащий бит называется младшим битом; самый старший бит называется старшим немного. Память, доступная для программы на С++, состоит из одной или нескольких последовательностей смежных байтов. каждый байт имеет уникальный адрес.
Ответ 2
Байт означает 8-разрядную единицу памяти.
Это неверно.
Однако С++ определяет байты по-разному.
Это также неверно.
В терминологии С++ и общем языке байт является минимальной единицей памяти. 8-разрядный байт известен как октет.
Можете ли вы объяснить, если компилятор С++ имеет 16-разрядный байт, тогда как система имеет 8-битный байт, то как будет работать программа в такой системе?
Это не так. Если вы скомпилируете программу для архитектуры, чьи байты 16-бит, она не будет работать на компьютере с архитектурой, чьи байты 8-бит.
Вам нужно скомпилировать процессор, который вы используете.
Ответ 3
Раньше были машины с переменным размером байта или размером байта, меньшим 8. Спецификация оставляет его открытой для реализации на данном оборудовании.
DEC PDP-10 имел размер слова на 36 бит, и вы могли указать размер байта (обычно 5 7-битных байтов для слова...)
http://pdp10.nocrew.org/docs/instruction-set/Byte.html