> -- Wlad писал(а):
> Вы говорите о различных настройках выравнивания в "вульгарном" Си. Это - единственное место "магии". Но оно - часть модели/стандарта языка и реализации компиляторов. В Си скрытые поля - лишь заполнители компилятором для выравнивания.Я говорю о стандарте языка, а не о том, как оно реализовано и оптимистичную опору в программах на особенности реализации. А в стандарте всюду неопределённое поведение с трудно предсказуемыми последствиями для общего случая. Заполнители могут использоваться для чего угодно, например, распространено использование "канареек" для обнаружения нарушения памяти. Это применяется для стека, но для структур тоже не запрещено.

Реализовывают сейчас, кстати, тоже сильно по разному и в самом что ни на есть mainstream. Тот функционал, что предоставляется флагами -fsanitize=* в gcc и clang трудно обеспечить без дополнительных данных. А флаг -fsanitize-undefined-trap-on-error делает применение предыдущих флагов пригодным и для конечного продукта, а не только для отладки.