В чем разница в определении байта в терминах компьютерной памяти и с точки зрения С++?

Это со ссылкой на текст из С++ 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