Выравнивание с помощью функции malloc
malloc гарантированно возвращает память, которая подходит для хранения любого объекта с базовым выравниванием, который мог бы поместиться в выделенной памяти.Базовое выравнивание — это выравнивание, которое меньше или равно наибольшему выравниванию, которое поддерживается реализацией без задания выравнивания. (В Visual C++ это основное выравнивание, необходимое для double или 8 байт.В коде, который нацелен на 64-разрядные платформы, это 16 байт.) Например, выделение 4 байт будет выровнено по границе, которая поддерживает все любой четырехбайтовый или меньший объект.
Visual C++ допускает типы, имеющие расширенное выравнивание, также известные как сверх-выровненные типы.Например, типы SSE __m128 и __m256, а также типы, объявленные с помощью __declspec(align(n)), где n больше 8, имеют расширенное выравнивание.Выравнивание памяти на границе, которая подходит для объекта, который требует расширенного выравнивания, не гарантированного malloc.Чтобы выделить память для избыточно выровненных типов, используйте _aligned_malloc и соответствующие функции.