Это действительно деталь реализации. Когда-то давно я думал, что это может быть нулевой байт или тысяча байт, что он не имеет никакого отношения к спецификации языка. Но, посмотрев на стандарт (раздел 5.3.3), sizeof
определяется как всегда возвращающий один или более, независимо от того, что.
Размер самого производного класса должен быть больше чем нуль.
blockquote>Это требуется, помимо прочего, для обработки массивов объектов и указателей. Если вашим элементам было присвоено нулевое значение, то
&(array[0])
будет идентичным&(array[42])
, что вызовет всевозможные хаосы для ваших циклов обработки.Причина, по которой это может быть не так машинное слово состоит в том, что в нем нет элементов, которые фактически требуют, чтобы он был выровнен на границе слова (например, целое число). Например, если вы помещаете
char x; int y;
внутри класса, мой GCC синхронизирует его с восемью байтами (поскольку второй int должен быть выровнен в этой реализации).