Создание выровненного слова
Мне нужно создать класс данных необработанного буфера, он должен возвращать указатель на 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
в каждой реализации, которую я видел, и это подразумевает как минимум выравнивание слов.