Как можно было бы использовать malloc (или new, так как в большинстве реализаций new реализован с помощью malloc, не уверен, что стандарт говорит о выравнивании, а новое, кроме данных, должно быть выровнено с самым высоким скалярным выравниванием) с типом, который имеет Требование выравнивания установлено выше максимального требования выравнивания в системе (alignof(std::max_align_t)
)? Так что-то вроде
alignas(alignof(std::max_align_t) + alignof(int)) struct Something {
...
};
Превращение комментария в ответ.
Позволять ALIGNMENT
обозначим требуемое выравнивание.
Тогда вы можете смело распределять свою структуру следующим образом:
char* buffer = new char[ALIGNMENT+sizeof(Something)];
uintptr_t address = reinterpret_cast<uintptr_t>(buffer);
uintptr_t aligned_address = address+ALIGNMENT-address%ALIGNMENT;
Something* something = reinterpret_cast<Something*>(aligned_address);
Других решений пока нет …