выравнивание памяти выше максимального выравнивания alignas malloc

Как можно было бы использовать malloc (или new, так как в большинстве реализаций new реализован с помощью malloc, не уверен, что стандарт говорит о выравнивании, а новое, кроме данных, должно быть выровнено с самым высоким скалярным выравниванием) с типом, который имеет Требование выравнивания установлено выше максимального требования выравнивания в системе (alignof(std::max_align_t))? Так что-то вроде

alignas(alignof(std::max_align_t) + alignof(int)) struct Something {
...
};

2

Решение

Превращение комментария в ответ.

Позволять 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);
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]