关闭

g++字节对齐

598人阅读 评论(0) 收藏 举报

g++可能通过__attribute__ ((aligned (n)))来设置变量的字节对齐数,如

[cpp] view plain copy
  1. float a __attribute__ ((aligned (16)));  
 

就可以设置变量a按16字节对齐。

也可以将这个属性用于类及其成员变量

[cpp] view plain copy
  1. class A  
  2. {  
  3.     virtual float* getData(){return &a;}  
  4.     int a;  
  5. }__attribute__ ((aligned (16)));  
 

这时类A的对象按照16字节对齐,但是你会发现成员变量a的地址并不是16字节对齐的,这是因为类的内存会存储虚表地址,这样a的地址会偏移4个字节(具体偏移大小根据平台可能会有所不同)。

但是,有很多情况是需要某个变量16字节对齐的,例如用sse加速时,就要求变量是16字节的。这时该怎么办呢。g++可以针对类的成员设置字节对齐,例如

[cpp] view plain copy
  1. class test  
  2. {  
  3.  public:  
  4.      test(){}  
  5.      void hehe(){};  
  6.      virtual float* getData(){return &a;}  
  7.      virtual float* getBData(){return b;}  
  8.  protected:  
  9.      float a __attribute__ ((aligned (16)));  
  10.      float b[4];  
  11. };  
 

这时a的地址是16字节对齐,但b的地址不是对齐的。这样设置还有一个副作用就是类的对象的地址也会16字节对齐。

0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

linux和windows gcc g++ vc编译器字节对齐

首先可以肯定的说,肯定和编译器有关,vc编译器和gcc,g++编译器肯定不一样,不说明是什么编译器什么系统下问你结构体长度就是在耍流氓。 (1)vc编译器下结构体成员首地址地址必须被该结构体成员长度...
  • qq_26654257
  • qq_26654257
  • 2017-09-15 16:16
  • 141

字节对齐导致sizeof()比实际更大

转载地址 写出一个struct,然后sizeof,你会不会经常对结果感到奇怪?sizeof的结果往往都比你声明的变量总长度要大,这是怎么回事呢?讲讲字节对齐吧./******************...
  • JQ_AK47
  • JQ_AK47
  • 2015-06-10 20:31
  • 781

任意字节对齐的内存分配和释放

任意自己内存对齐,intel笔试
  • Gen_Ye
  • Gen_Ye
  • 2016-09-28 23:00
  • 1537

实现任意字节对齐的内存分配和释放

任意字节对齐的内存分配和释放。 源码实现 // 实现任意字节对齐的内存分配和释放 void *AllignedMalloc(size_t size, int aligned) { ...
  • gettogetto
  • gettogetto
  • 2017-03-27 16:51
  • 234

对内存对齐的深一步理解

接触内存对齐这个概念,也有三四年了。不过由于我工作后一直做游戏服务器,都是在x86架构的机子上写代码,也没怎么注意内存对齐。使用最多的估计也就是面试时经常问结构体大小。最近在写自己服务器框架的二进流读...
  • weiyuefei
  • weiyuefei
  • 2016-08-05 14:17
  • 1565

什么叫内存对齐 -就是字节对齐

字,双字,和四字在自然边界上不需要在内存中对齐。(对字,双字,和四字来说,自然边界分别是偶数地址,可以被4整除的地址,和可以被8整除的地址。) 无论如何,为了提高程序的性能,数据结构(尤其是栈)应该尽...
  • u011676589
  • u011676589
  • 2013-09-22 16:11
  • 1283

关于内存对齐的问题

在最近的项目中,我们涉及到了“内存对齐”技术。对于大部分程序员来说,“内存对齐”对他们来说都应该是“透明的”。“内存对齐”应该是编译器的 “管辖范围”。编译器为程序中的每个“数据单元”安排在适当的位置...
  • u011939264
  • u011939264
  • 2016-05-31 21:33
  • 905

字节对齐与内存访问

关于字节对齐,最早是在《高质量程序设计》中看到的,当时明白一点,就是因为定义的数据字节大小不一(1字节,2字节,4字节,8字节),在内存中可能会有字节对齐的操作,就是数据在内存中的排放,不一定是连续的...
  • dearwind153
  • dearwind153
  • 2016-03-20 21:19
  • 757

32位和64位下结构体内存对齐问题

1.先看64位下: #include struct A { int a; char b; double c; char d; };struct B { ...
  • lyh__521
  • lyh__521
  • 2015-05-25 00:28
  • 3830

嵌入式中的数据对齐

首先要提到总线宽度这个概念,我们平常提到的32位处理器、64位处理器,就是指的总线宽度为32、64位,也就是在一个处理器访问周期中访问的数据位数。对于某些处理器多字节访问必须从偶数字节开始,如果从奇数...
  • u010945683
  • u010945683
  • 2015-04-26 18:06
  • 719
    个人资料
    • 访问:148537次
    • 积分:3300
    • 等级:
    • 排名:第11893名
    • 原创:176篇
    • 转载:77篇
    • 译文:2篇
    • 评论:16条
    文章分类
    最新评论