Создание выровненного слова

Мне нужно создать класс данных необработанного буфера, он должен возвращать указатель на char это гарантированно выровнено по словам.

Я думал об использовании std::vector<<something>> vec,

Я знаю, что большинство (если не все) реализации std::vector буду использовать operator new выделить память, которая гарантированно возвращает максимально выровненную память, но я не хочу на это полагаться.

Я тоже не хочу создавать свой собственный выравниватель. Похоже на излишество.

Это то, что я придумал: (притворимся, что uintptr_t гарантированно будет иметь размер слова)

typedef uintptr_t WORD_TYPE;

std::vector<WORD_TYPE> vec;

И тогда я использую это для доступа к данным:

reinterpret_cast<char*>(vec.data());

Я не вижу, чтобы найти какие-либо проблемы с этим подходом. Это правильно или есть лучший способ, учитывая перечисленные требования?

1 ответ

Принятый ответ в этом посте ТАК гласит, что new Оператор гарантирует выравнивание для любого типа объекта. Просто используя std::vector<char> должен соответствовать вашим потребностям; как вы говорите, std::vector использования new в каждой реализации, которую я видел, и это подразумевает как минимум выравнивание слов.

Другие вопросы по тегам