Сколько бит в байте для компилятора GCC - PullRequest
3 голосов
/ 26 марта 2019

Согласно спецификации C ++

Байт, по крайней мере, достаточно большой, чтобы содержать любой элемент основного набор символов выполнения (2.3) и восьмибитные кодовые единицы Unicode UTF-8 кодирует форму и состоит из непрерывной последовательности битов, число которых определяется реализацией.

Это означает, что число битов в байте должно быть 8 битами или более 8 битами.

Теперь, согласно gcc, количество битов определяется ABI.

https://gcc.gnu.org/onlinedocs/gcc-5.4.0/gcc/Characters-implementation.html#Characters-implementation

4,4 символов

Количество бит в байте (C90 3.4, C99 и C11 3.6).

Определяется ABI

GCC основан на ABI - http://itanium -cxx-abi.github.io / cxx-abi /

Может кто-нибудь указать мне место, где упоминается количество бит в байте?

Ответы [ 2 ]

4 голосов
/ 26 марта 2019

Может кто-нибудь указать мне место, где указано количество бит в байте?

Педантично, это не так.Этот конкретный ABI использует «байт» вместо «октет» повсюду;в современную эпоху «байт» является общим синонимом «октета», потому что подавляющее большинство используемых систем имеют 8-битные байты.

Это действительно так:

ВВ общем, этот документ написан как общая спецификация, которая может быть использована реализациями C ++ на различных архитектурах.Тем не менее, он содержит специфичный для процессора материал для 64-разрядной ABI Itanium, идентифицированный как таковой.Там, где описывается структура структурированных данных, мы обычно принимаем размеры элементов Itanium psABI.

… и все чипы Itanium имеют 8-битные байты.

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

Здесь нет места для интерпретации, даже если связь между битами и байтами прямо не указана.

Я буду очень редко пишите static_assert(CHAR_BIT == 8), если я чувствую себя особенно параноиком.В целом, вы можете положиться на это, если не нацелены на что-то действительно экзотическое.

4 голосов
/ 26 марта 2019

Стандарт C ++ (и, следовательно, большинство компиляторов) фактически гарантирует только то, что char равно как минимум 8 смежных битов.Для любой конкретной компиляции фактическое количество битов зависит от архитектуры целевого процессора.

Однако вам придется довольно сильно постараться найти целевой процессор, который в большинстве случаев не имеет 8-битных байтов.

Если вам нужно написать код, который зависит от предположения о 8-битном байте, то вы всегда можете static_assert(CHAR_BIT == 8) предотвратить любую компиляцию, которая нарушает ваше предположение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...