对malloc分配的资源做内存对齐

内存对齐
参考百度百科的解释

  1. 平台原因(移植原因):不是所有的硬件平台都能访问任意地址上的任意数据的;某些硬件平台只能在某些地址处取某些特定类型的数据,否则抛出硬件异常。
  2. 性能原因:数据结构(尤其是栈)应该尽可能地在自然边界上对齐。原因在于,为了访问未对齐的内存,处理器需要作两次内存访问;而对齐的内存访问仅需要一次访问。

个人的一点说明
在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
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值