zoukankan      html  css  js  c++  java
  • 结构体字节对齐

    //提示:32位STM32中,int是4字节,double为8字节。
    #pragma   pack(8)  //指定对齐方式:8字节对齐
    typedef struct{
        char name[3];
        int age;
        double score;
    }Student;
    
    
    typedef struct{
        char name[3];
        double score;
        int age;
    }Engineer;
    
    typedef struct{
        char name[3];
        char height;
        double score;
        int age;
    }Teacher;
    
    求:
    printf("%d",sizeof(Student));
    printf("%d",sizeof(Engineer));
    printf("%d",sizeof(Teacher));
    //答案:16,24 ,24
    

    student:
    32位的寄存器是4个字节

    1. 首先给name分配空间,name[0]占一个字节
    2. name[1]占一个字节
    3. name[2]占一个字节
    4. 给age分配空间时,age占四个字节,于是,char[3]为了对齐,也要占四个字节,于是name[0]、name[1]、name[2]各自占一个字节,之后空出一个字节,总共占用四个字节,然后age占用4个字节
    5. 给score分配空间,score占用两个32位,即8个字节

    总共占用4+4+8=16个字节

    Engineer:

    1. 首先给name分配空间,name[0]占一个字节
    2. name[1]占一个字节
    3. name[2]占一个字节
    4. 给score分配空间时,score占8个字节,于是,char[3]为了对齐,也要占8个字节,于是name[0]、name[1]、name[2]各自占一个字节,之后空出5个字节,总共占用8个字节,然后score占用8个字节
    5. 给age分配空间,为了与score对齐,占用8个字节,空出4个字节

    总共占用8+8+8=24个字节

    Teacher:

    1. 首先给name分配空间,name[0]占一个字节
    2. name[1]占一个字节
    3. name[2]占一个字节
    4. 给high分配,与char对齐,占用一个字节,刚好把name空出的一个字节占下,这个总共分配四个字节
    5. 给score分配空间时,score占8个字节,于是,char[3]与high为了对齐,也要占8个字节,于是name[0]、name[1]、name[2]、height各自占一个字节,之后空出4个字节,总共占用8个字节,然后score占用8个字节
    6. 给age分配空间,为了与score对齐,占用8个字节,空出4个字节 总共占用8+8+8=24个字节

    总结,写结构体的时候,把字节占用小的数据变量写在前面,可能会省空间

    看不懂去看这篇,我感觉自己理解还是有点问题滴

  • 相关阅读:
    vue / js使用video获取视频时长
    vuex的使用
    eclipse中没有tomcat小猫
    Windows下安装Redis服务
    postman上传文件对参数的contentType类型设置方式
    !与&&优先级的问题
    备份数据库中的某个表的数据报错Statement violates GTID consistency
    Error 'Cannot add or update a child row: a foreign key constraint fails故障解决
    解除项目与其他服务的强依赖
    常见的几种异常类型 Exception
  • 原文地址:https://www.cnblogs.com/hhsxy/p/14018372.html
Copyright © 2011-2022 走看看