int:0;
объявляет битовое поле нулевой ширины.
Это не занимает памяти, но явно отделяет битовые поля, объявленные до него, от битовых полей, объявленных впоследствии, в отдельные области памяти.
Это потенциально может ввести заполнение в вашу структуру, но это может быть важно для одновременного доступа.
В вашем примере b
и c
занимают одно и то же место в памяти, поэтому вы не можете иметь один поток доступа b
в то время как другой обращается к c
. С другой стороны, битовое поле нулевой ширины гарантирует, что d
является отдельной ячейкой памяти, поэтому к b
и d
можно обращаться одновременно из отдельных потоков без синхронизации.
Без нулевой ширины битовое поле, на 32-битных или 64-битных платформах вполне вероятно, что компилятор сделает b
, c
и d
частью одного машинного слова, поэтому безопасный параллельный доступ будет невозможен без специальных инструкций, тогда как при битовое поле нулевой ширины, компилятор должен гарантировать, что они хранятся в отдельных машинных словах, или соответствующие инструкции используются для обеспечения безопасности одновременного доступа.