内存对齐
参考百度百科的解释
- 平台原因(移植原因):不是所有的硬件平台都能访问任意地址上的任意数据的;某些硬件平台只能在某些地址处取某些特定类型的数据,否则抛出硬件异常。
- 性能原因:数据结构(尤其是栈)应该尽可能地在自然边界上对齐。原因在于,为了访问未对齐的内存,处理器需要作两次内存访问;而对齐的内存访问仅需要一次访问。
个人的一点说明
在c/c++中,使用malloc();动态分配的内存是随机的,如果要对分配的这段内存运算比较频繁,可能有性能上的问题,同时也可能需要移植到不同的硬件平台,也会存在潜在隐患,需要使用内存对齐来优化。
那么优化方法其实很容易,主要借助于两个相对透明的的关键字 max_align_t 和 alignof,
其中 max_align_t 是一种对齐要求至少与每个标量类型一样严格(大小)的类型,
max_align_t通常是最大标量类型的同义词,在大多数平台上它是长双倍的,并且其对齐要求为8或16。
alignof : 获取地址对其的大小,POD里面最大的内存对齐的大小。
下面是一段做对齐的代码:
使用malloc分配的地址ptr对aligned_len取余,即可得到整齐的内存边界地址data_, 以此地址(data_)来作为存储数据的首地址.
template <typename Scalar, int aligned_len>
AlignedMatrix<Scalar