C++ 创建单词对齐的字符向量

C++ 创建单词对齐的字符向量,c++,vector,alignment,c++03,C++,Vector,Alignment,C++03,我需要创建一个原始缓冲区数据类,它必须返回一个指向char的指针,该指针保证是字对齐的 我在考虑使用std::vector vec 我知道std::vector的大多数(如果不是全部)实现将使用operator new来分配保证返回最大对齐内存的内存,但我不想依赖于此 我也不想创建自己的对齐分配器。看起来太过分了 这就是我想到的:(让我们假设uintpttr\t保证有单词大小) typedef uintpttr\t WORD\u TYPE; std::vec; 然后我用这个来访问数据: rei

我需要创建一个原始缓冲区数据类,它必须返回一个指向
char
的指针,该指针保证是字对齐的

我在考虑使用
std::vector vec

我知道
std::vector
的大多数(如果不是全部)实现将使用
operator new
来分配保证返回最大对齐内存的内存,但我不想依赖于此

我也不想创建自己的对齐分配器。看起来太过分了

这就是我想到的:(让我们假设
uintpttr\t
保证有单词大小)

typedef uintpttr\t WORD\u TYPE;
std::vec;
然后我用这个来访问数据:

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

我看不出这种方法有什么问题。这是正确的还是有更好的方法来考虑所列的要求?

SO post中接受的答案指出,
新的
操作符确实保证任何对象类型的对齐。简单地使用
std::vector
应该适合您的需要;就像你说的,
std::vector
在我见过的每个实现中都使用
new
,这至少意味着单词对齐。

@Jarod42我不明白。你想用你的向量作为缓冲区吗?或者使用它(
push_back('*');
)?@Jarod42作为缓冲区。封闭类将仅使用问题中列出的表达式公开
getData()
方法。为什么不使用as
alignas(128)char cacheline[128]
?@Jarod42 I必须动态调整大小,并且必须在C++03上编译,因此不能使用
alignas
。我确实需要动态调整大小。而且我不能依靠
vector
来实现
operator new
,即使它在实践中也是如此。如果您不需要在运行时调整缓冲区的大小,我建议创建一个类,使用
new[]
在构造函数中分配所需长度的无符号字符[]数组,在析构函数中分配
delete[]
,和一个getData()方法。如果您不信任new的对齐方式,那么可以使用两个指针创建类;一个用于分配和取消分配内存,分配一个字减去一个字节的额外内存,另一个从第一个字的地址开始,并向前迭代,直到它指向的地址正确对齐。然后,第二个指针将用于对齐的getData()。我可能必须这样做。@imreal如果使用2指针方法-您不需要自己分配-使用向量作为存储,指向向量内部对齐起始点的指针
reinterpret_cast<char*>(vec.data());