Существует std::align
, который можно использовать для получения указателя на выровненную область памяти. Вы можете проверить, выравнивается ли перераспределенная область, сравнив указатель с результатом std::align
. В противном случае memmove()
может быть необходимым.
Существует также std::aligned_storage
, который может быть опцией для выровненных распределений фиксированной (т. Е. Во время компиляции) части.
Возможной стратегией реализации может быть распределитель, который извлекает память из указанного c пула памяти. Пул памяти возвращает только память, выровненную по std::align
или может управлять блоками std::aligned_storage
. Этот подход также дает вам все преимущества пулов памяти, например, локальность кэша, отсутствие фрагментации памяти и, возможно, более быстрые алгоритмы выделения (зависит от реализации ваших пулов и malloc
).