Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
struct unaligned_i32 {
int32_t value;
} __attribute__((packed));
__attribute__((packed)) решает проблему, а стандартизированный _Alignas(...) не может выравнять меньше чем на естественную границу.typedef uint32_t unaligned_uint32_t __attribute__((aligned(1)));
Вместо того чтобы скрывать особенности архитектуры компилятор выворачивает их мехом наружу.
Вот за это современный C++ мне не нравится
for (size_t i = 5; i < size / 4; i++) {
sum += q[i];
а один раз скопировать в выровненный буфер, и потом целиком посчитать не?
История одного бага: выравнивание данных на x86