aligned_storage

aligned_storage

通过union 将存储和访问分开,并将存储数据的内存作为整体进行对齐

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <vector>
#include <iostream>
#include <type_traits>

template <typename T>
using Vec = std::vector<T>;

template <typename T, size_t N>
struct GetAlignedData {
using type = typename std::aligned_storage<sizeof(T) * N, sizeof(T) * N>::type;
};

template <typename T, size_t N>
using AlignedType = typename GetAlignedData<T, N>::type;

template <typename T, size_t N>
union PackData {
AlignedType<T, N> storage;
T elem[N];
};

int main() {
PackData<int, 4> data;
int x[4] = {1, 2, 3, 4};
data.storage = *(reinterpret_cast <AlignedType<int, 4>* >(x));
for(auto z : data.elem) {
std::cout << "z: " << z << std::endl;
}
return 0;
}


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!