Многие архитектуры ЦП не могут обрабатывать или очень неэффективны при обработке произвольных адресов.
Ваша архитектура, которую я предполагаю x86_64, хочет получить доступ к памяти, по крайней мере, из 8 байтовых блоков.
Итак, 12 байтов равны полутора 8-байтовым фрагментам - не очень хорошо.Затем происходит следующее: компилятор дополняет структуру фиктивными данными в конце до тех пор, пока он не уместится даже в 8 байтных блоков, в данном случае это 4 дополнительных байта, что в сумме составляет 16 байт.
То же самое касаетсяразные процессоры, но с разными выравниваниями.Некоторые процессоры даже работают без выравнивания вообще, но большинство современных процессоров работают лучше с выравниванием.
Как уже отмечали другие, используйте, например,% p для печати указателя.
Для size_t
printfs, используйте %lu
и приведите к (unsigned long)
, если вы не можете использовать C99 и %zd
.