精华内容
下载资源
问答
  • 结构体字节对齐

    2020-08-19 15:01:59
    结构体字节对齐
    //提示: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个字节

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

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

    展开全文
  • 结构体字节对齐规则

    2018-01-29 11:17:59
    结构体字节对齐规则,主要是介绍结构体字节对齐规则,内容有点长,但是很全面.

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,508
精华内容 1,403
关键字:

结构体字节对齐