当前位置: 首页> 科技> 能源 > 结构体空间里面成员的内存分布

结构体空间里面成员的内存分布

时间:2025/7/11 4:22:29来源:https://blog.csdn.net/amyliyanice/article/details/141725901 浏览次数:0次

结构体空间里面成员的内存分布
    
    遵循 “字节对齐” 原则
        1、先找结构体中占据字节数最多的成员,以它的字节数为单位进行分配一份
            如果有数组将看成元素数据类型所找字节数(并列的)
            如果有结构体,看成员占据自己数最多的成员
            
        2、每个成员距离 它所在的结构体的首地址 必须是这个成员所占字节数的 整数倍
        3、每个结构体所占空间大小 一定是 它内部所占字节数最多的字节数 的整数倍

        
        struct data1
        {
            char ch;
            short b;
            int c;
        };
        
        // struct data1类型所占字节数:  8 
        // 开空间 
        struct data1 d1;
        
        printf("%p %p %p",&d1.ch,&d1.b,&d1.c);  // 98 9A 9C
        
        最大成员所占字节数:4,分配以4为单位进行分配
        
        
        struct data2
        {            
            short b;
            int c;
            char ch;
        };
        
        // struct data2类型所占字节数:  12 
        
        struct data3
        {
            char ch;  // 1个4
            int a[4]; // 4个4
            char name[20]; // 5个4
            short b;     // 1个4    
        };
        
        // struct data3类型所占字节数:  44
            如果有数组将看成元素数据类型所找字节数(并列的) 
            最大的自己数是4
            
            
        struct test
        {
            char ch;
            int b;
            double t;
            char z;
        };
            
        struct data4
        {
            char ch;
            struct test k;  // 结构体成员  
            // char k.ch;
            // int k.b;
            // double k.t;
            // char k.z;
            short b;            
        };
        
        struct data4 d1;
        
        // struct data3类型所占字节数:  40
        // 如果有结构体,看成员占据自己数最多的成员
            最大:打散,将k看成:
                // char k.ch;
                // int k.b;
                // double k.t;
                // char k.z;
                
                所以最大:8个
                
            分配空间摆放成员位置。
                k距离d1必须是里面最大成员所占字节数的整数倍
                k所占字节数也必须是里面最大成员所占字节数的整数倍
            

关键字:结构体空间里面成员的内存分布

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: