结构体和类的字节对齐

原创 2016年08月30日 14:17:43
   编译器为了优化运行效率,对于结构体和类的成员访问会进行字节填充,即字节对齐。在这之前,我们需要知道如下基本信息:

    1 C++中,类和结构体并没有本质的区别。只是默认的访问权限不同。
    2 类和结构体的大小都是数据成员的大小,而不包括累成员函数的大小。
    3 空的类或者空的结构体的大小都为1,而不是0。目前是编译器能够对其进行寻址定位。

     字节对齐通常是已结构体中占用空间最大的一个成员进行对齐的。
     typedef struct
    {
         char c; //占4个字节
         int i; //4个字节
     }TEST,*PTEST;
     32位机上,该结构体的大小为8。

    typedef struct
   {
           char c;  //4
           int i;   //4 
           long long k; //8
     }TEST,*PTEST;
     32位机上,该结构体的大小为16字节。

    typedef struct
    {
           char c;  //8
           long long k; //8 
           int i; //8
      }TEST,*PTEST;
     32位机上,该结构体的大小为24字节。

     typedef struct
    {
           char c;  //占用4个字节,以int对齐
           int m; //占用4个字节,加上c的4个字节和k的8个字节对齐
           long long k; //8 
           int i; //8 已k的8个字节对齐
      }TEST,*PTEST;
     32位机上,该结构体的大小为24字节。

转载_结构体中四字节对齐的详解

转载_结构体中四字节对齐的详解 2013-06-06 12:07 2967人阅读 评论(1) 收藏 举报  分类: C/C++(33)  一 四字节对齐的规则 ...
  • WALLEZhe
  • WALLEZhe
  • 2017年03月15日 11:03
  • 953

windows和Linux之间socket传输结构体关于字节对齐产生的问题

这个是我在做转码机的时候发现的问题。这个转码机大致的思路是:将转码机上面的数据用结构体打包通过socket发送给Linux客户端。Linux客户端也是用结构体去接收。 发送的过程中出现了这样一个问题,...
  • u012654882
  • u012654882
  • 2015年04月03日 12:27
  • 1051

字节对齐--指定结构体以多少字节对齐

通过使用宏,指定某些结构体或者类的字节对齐方式. #pragma  pack(push)  //让原字节对齐方式入编译器栈 #pragma  pack(1)    //指定新的对齐方式, 1字节对...
  • xiaohuh421
  • xiaohuh421
  • 2012年04月16日 10:57
  • 2755

结构体的字节对齐(跨语言传参时尤为重要)

在项目开发时,结构体作为一个数据结构,非常适合用语存储某一设备或某一类事务的信息,自然的,将其用作参数也是必然的事。然而在将结构体作为参数生成DLL后,用其他语言调用时,则会有一些问题。比如在用C#调...
  • xxdddail
  • xxdddail
  • 2013年09月18日 16:00
  • 2521

C++中结构体的字节对齐问题

  前不久,在C++程序中碰到一个有关结构体字节对齐的问题。一。问题描述在程序中,定义了一个结构体,如下:typedef struct{   char name[33];   int ID;   in...
  • roger_77
  • roger_77
  • 2006年04月02日 00:18
  • 3031

内存对齐与补齐 字节对齐与结构体大小

[C++]字节对齐与结构体大小   转自:http://pppboy.blog.163.com/blog/static/30203796201082494026399/ 结构体的sizeo...
  • u010479322
  • u010479322
  • 2016年04月12日 22:26
  • 1176

C语言字节对齐、结构体对齐最详细的解释

文章最后本人做了一幅图,一看就明白了,这个问题网上讲的不少,但是都没有把问题说透。   一、概念       对齐跟数据在内存中的位置有关。如果一个变量的内存地址正好位于它长度的整数倍,他就...
  • lanzhihui_10086
  • lanzhihui_10086
  • 2015年03月17日 21:57
  • 10392

C++字节对齐与结构体大小计算

转载注明出处:http://pppboy.blog.163.com/blog/static/30203796201082494026399/ 感谢原创博主的辛勤成果。...
  • loveRooney
  • loveRooney
  • 2014年07月29日 11:24
  • 1816

更改结构体的内存字节对齐方式--经典

结构体字节对齐   http://blog.163.com/ecy_fu/blog/static/4445126200910603739941/         http://hi....
  • u013165704
  • u013165704
  • 2016年12月16日 10:32
  • 1218

计算结构体大小(字节对齐)

一,默认对齐方式 字节对齐的细节和具体编译器实现相关,但一般而言,满足以下三个准则(也是VC默认对齐方式): 1,结构体变量的首地址能够被其最宽基本类型成员的大小所整除(0能被任意整数整除); 2,结...
  • u010927488
  • u010927488
  • 2015年10月17日 10:53
  • 449
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:结构体和类的字节对齐
举报原因:
原因补充:

(最多只允许输入30个字)