ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Суббота
23 ноября
1020633 Топик полностью
fk0, легенда (24.07.2020 14:34, просмотров: 605) ответил AlexBi на В данном случае члены структуры должны становиться packed. А как, по-твоему, работает (должно работать) volatile структура? Будут ее члены каждый раз перечитываться? Указатель на члена структуры будет volatile?
С чего ты решил, что они кому-то что-то должны? Где это написано? Тип поля, если это не вновь определяемая на месте структура, уже определён ранее и измениться никак не может (иначе это другой, новый тип должен быть). А выравнивание и размер -- это атрибуты, свойства, типа. Поэтому если ты в упакованную структуру положишь ранее определённый тип, то он сохранит свои свойства. Структура останется с "дырками" для выравнивания, обычный int сохранится с alignas(4). Что мы и 

наблюдаем, почему есть "баг".


Смотри, результат вообще "прекрасен" (внешняя структура меньше в неё вложенной):

https://coliru.stacked-crooked.com/a/20f96c2ce1cf2074


Вдогонку, const и volatile не являются атрибутами типа (как alignas и sizeof), а применимы к конкретной переменной. И typedef не объявляет новый тип...

[ZX]