【发布时间】:2018-01-11 10:41:29
【问题描述】:
我需要创建一个原始缓冲区数据类,它必须返回一个指向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());
我看不出这种方法有什么问题。考虑到列出的要求,这是正确的还是有更好的方法?
【问题讨论】:
-
@Jarod42 我不明白。
-
你想用你的向量作为缓冲区吗?或使用它(
push_back('*');)? -
@Jarod42 严格作为缓冲区。封闭类只会使用问题中列出的表达式公开
getData()方法。 -
为什么不使用
alignas作为alignas(128) char cacheline[128];? -
@Jarod42 我必须动态调整大小,并且必须在 C++03 上编译,所以不能使用
alignas。
标签: c++ vector alignment c++03