Фундаментальной единицей хранения в модели памяти C ++ является расширение byte. Байт, по крайней мере, достаточно велик, чтобы содержать любой член basic execution character set и восьмибитные кодовые единицы формы кодирования Unicode UTF-8, и состоит из непрерывной последовательности битов,4 количество которых определяется реализацией. Наименьший значащий бит называется low-order bit; самый старший бит называется high-order bit. Память, доступная программе C ++, состоит из одной или нескольких последовательностей смежных байтов. Каждый байт имеет уникальный адрес.
A memory location - либо объект скалярного типа, либо максимальная последовательность смежных битовых полей, имеющих ненулевую ширину. [ Note: Различные функции языка, такие как ссылки и виртуальные функции, могут включать дополнительные области памяти, которые недоступны для программ, но управляются реализацией. ] Два или более могут обращаться к разным ячейкам памяти, не мешая друг другу. — end note threads of execution
[ Note: Таким образом, битовое поле и соседнее небитовое поле находятся в разных ячейках памяти и, следовательно, могут одновременно обновляться двумя потоками выполнения без помех. То же самое относится к двум битовым полям, если одно объявлено внутри объявления вложенной структуры, а другое - нет, или если эти два разделены объявлением битового поля нулевой длины, или если они разделены небитовым -поле декларации. Одновременное обновление двух битовых полей в одной структуре небезопасно, если все поля между ними также являются битовыми полями ненулевой ширины. ] — end note
[ Example: Структура, объявленная как
struct { char a; int b:5, c:11, :0, d:8; struct {int ee:8;} e; }
содержит четыре отдельные ячейки памяти: поле a и битовых полей d и e.ee каждый представляет отдельные ячейки памяти, и могут быть изменены одновременно , не мешая друг с другом. Битовые поля b и c вместе составляют четвертую ячейку памяти. Битовые-поля b и c не могут быть одновременно изменены, но b и a, например, может быть. ] — end example
Число битов в байте сообщается макросом CHAR_BIT в заголовке <climits>.