Кажется разумным предположить, что T
и const T
будут двух типов, которые будут одинакового размера и имеют одинаковое выравнивание, но, подумав о некоторых реальных системах, кажется, что они могут быть разными.
Позвольте мне объяснить:
Предположим, у вас есть система с двумя типами памяти: RAM и Flash (которая только для чтения). ОЗУ 8-битная адресуемая, а Flash - только 16-битная адресуемая. Предположим, что это T
:
struct T
{
uint8_t x;
uint16_t y;
};
В адресной ОЗУ с байтом эта структура будет иметь длину 3 байта.... но в адресной Flash-адресе с двойным байтом (где будет находиться переменная const
) эта структура должна быть длиной не менее 4 байтов, из-за проблем с выравниванием.
Итак, вот мой вопрос:
Соответствуют ли стандарты c и С++ размерам и выравниванию типов const
и non const
?