aligned 对齐 ??内存对齐/字节对齐/数据对齐/地址总线对齐?

其实是使用InitializeAcl()时发现有个aligned,可我不知道什么是aligned

于是乎我就先搜索了对齐,结果发现了一大堆,什么【字节对齐】、【内存对齐】、【地址总线 对齐】、【数据对齐】。他们之间有什么关系吗?相同、不同?

参考文章:

1. http://en.wikipedia.org/wiki/Data_structure_alignment(最后读吧,E文头晕)
2. http://blog.chinaunix.net/uid-22283027-id-3985411.html【总线 与 数据的字节对齐】

3.http://www.cnblogs.com/logogcn/archive/2010/11/30/1891699.html 【字节对齐 详解】

4.http://bbs.yingjiesheng.com/thread-200077-1-1.html 【一道面试题】

5.http://blog.csdn.net/donkeylong/article/details/4909720 【内存地址对齐 】

6. http://blog.shengbin.me/posts/gcc-attribute-aligned-and-packed/ [GCC中的aligned和packed属性] 自然对齐

其它

.http://www.360doc.com/content/11/1024/21/7725999_158810236.shtml 【内存对齐分配策略(含位域模式)】

. http://www.360doc.com/content/11/1024/21/7725999_158799756.shtml


读了一些文章后得到4个关键点

1. 由于CPU越来越牛B,每次能通过数据总线访问'N'字节,故每次读写访问的起始地址%N=0,即N的整数倍。这样就被有的的人称为“地址总线 对齐”。 (文章2)

2.  自然对齐naturally aligned(我没找到英文定义,不知道源自哪里。 文章8)

               对于C/C++中的基本数据类型,假设它的长度为n字节,那么该类型的变量会被编译器默认分配到n字节对齐的内存上。例如,char的长度是1字节,char类型变量的地址将是1字节对齐的(任意值均可);int的长度是4字节,所以int类型变量将被分配到4字节对齐的地址上。这种默认情况下的变量对齐方式又称作自然对齐(naturally aligned)。

              内存地址对齐在'N'上,也就是说数据的存放起始地址%N=0,即N的整数倍。

3struct不是基本数据类型,所以它的计算有自己的规则


4.  字节对齐/数据对齐/内存对齐(大家都是针对struct说): 象struct里放了好几个不同类型char/bool/int,为了快速访问成员(如果一个个都密密麻麻的存放,CPU找起来不方便),于是有了字节对齐的要求。

              

5. 如何针对struct/class计算对齐: 参考文章3,非常清楚,配合文章4可以更细致理解。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值