• struct的成员对齐问题-结构体实际大小问题


    struct的成员对齐
    注意:为了方便说明,等号左边是每个数据单独所占长度,右边是最终空间大小,以字节为单位。
    一、什么时间存在对其问题:(32位机对齐方式是按照4字节对其的,以下所有试验都是在32位机上验证的)
      当结构体成员数据按照其顺序组合,无法按4字节对齐时,存在对其问题。
      如:
        1+1=2;
        1+2=3;
        1+2+1=4(而不是6或者其他);
        2+1=3;(不是4)
        以上是不存在对其问题的(因为没有超过4字节)。
      如:
        1+4=8;
        4+1=8;
        1+4+1=12;
        1+2+4=8;
        1+3+4=8;
        以上就存在对其问题,有超过4字节的数据。
    二、存在对其问题时,应该如何对齐:
      当发生对其问题时,对其原则有两点:
      ①当所有成员数据和<=4时,结构体大小就是数据大小的和。
      ②连续数据类型的数据,如果可以组合成4,则将其组合,以节省空间。
      ③当和>4时,小于4字节的数据类型,其实际大小取min(4,max(所有数据类型大小))。注:所有数据类型大小,实质基本数据类型,不包括数组,结构体,
      如:
        char[5]  5=5;        超过的一个字符,时间大小=min(4,1)=1;
        1+2+4=8;           组合1、2,结果为8,而不是12.
        char + double +char =16;   实际是4+8+4=16;
        
    附录:
    ①在32位机中下边基本数据类型及其长度(byte):
    char:   1
    short:   2
    int:   4 
    long:   4
    long long:8
    pointer: 4
    enum:  4
    double:  8
    float:   4
     
  • 相关阅读:
    oracle学习篇十:序列
    oracle学习篇九:同义词
    oracle相关常识
    oracle之数据同步:Oracle Sql Loader使用说明(大批量快速插入数据库记录)
    oracle学习篇八:约束
    oracle学习篇七:更新操作、事务处理
    oracle学习篇六:子查询
    oracle学习篇五:组函数,分组统计
    oracle学习篇四:多表查询
    oracle学习篇三:SQL查询
  • 原文地址:https://www.cnblogs.com/cz-blog/p/4691756.html
Copyright © 2020-2023  润新知