我需要创建一个原始缓冲区数据类,它必须返回一个指向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());
我看不出这种方法有任何问题。它是否正确或是否有更好的方法来考虑列出的要求?
答案 0 :(得分:1)
this SO帖子中接受的答案表明new
运算符确保对齐任何对象类型。只需使用std::vector<char>
即可满足您的需求;就像你说的那样,std::vector
在我见过的每个实现中都使用了new
,这至少意味着字对齐。