• C语言结构体内存分配详情


    #include <stdio.h>
    
    int main()
    {
        /***************************************************
         *
         * 结构体内存分析(注意结构体里面定义成员结束后要使用分号):
         *   struct Date
         *   {
         *      int year;
         *      int month;
         *      int day;
         *    };
         *    struct Student
         *    {
         *       int age;
         *       char sex;
         *    };
         *    struct Stu
         *    {
         *       int age;
         *       char a;
         *       char b;
         *       char c;
         *       char d;
         *    };
         *    理论上:结构体所占用的存储空间是各个成员变量所占的存储空间之和。
         *         但是由于性能等原因分配内存是按照补齐算法进行分配。
         *    补齐算法(对齐算法):结构体所占用的存储空间,必须是所有成员中占用存储空间最大的成员的倍数
         *    结构体成员内存分配:分配内存是按照高位寻址,但是结构体分配内存时,把低位内存分配给最先定义的变量
         *  注意:
         *    1.定义结构体类型(并不会分配存储空间)
         *    2.定义结构体变量(真正分配存储空间)
         *
         ****************************************************/
        struct Date
        {
             int year;
             int month;
             int day;
        };
        printf("Date类型占用的存储空间是:%d
    ", sizeof(struct Date));
        struct Student
        {
            int age;
            char sex;
        };
        printf("Student类型占用的存储空间是:%d
    ", sizeof(struct Student));
        struct Stu
        {
            int age;
            char a;
            char b;
            char d;
        };
        printf("Stu类型占用的存储空间是:%d
    ", sizeof(struct Stu));
        struct St
        {
            int age;
            char a;
            char b;
            char d;
        };
        printf("St类型占用的存储空间是:%d
    ", sizeof(struct St));
        struct Date date = {1989, 2, 4};
        printf("date变量的地址是:%p
    ", &date);
        printf("year变量的地址是:%p
    ", &date.year);
        printf("month变量的地址是:%p
    ", &date.month);
        printf("day变量的地址是:%p
    ", &date.day);
         return 0;
    }
    Date类型占用的存储空间是:12
    Student类型占用的存储空间是:8
    Stu类型占用的存储空间是:8
    St类型占用的存储空间是:8
    date变量的地址是:0022fee4
    year变量的地址是:0022fee4
    month变量的地址是:0022fee8
    day变量的地址是:0022feec
  • 相关阅读:
    受约束的十人参赛问题
    受约束的10人参赛问题
    [转载]A、B、C、D、E、F、G、H、I、J 共10名学生有可能参加本次计算机竞
    使用SSH集成框架开发项目步骤
    Java语言高职组最后一题题
    受约束的十人参赛问题
    setsockopt的TCP层实现剖析
    周鸿祎:做产品体验先把自己切换到二傻子模式
    sysctl使用方法的变化
    产品设计核心要做到极致
  • 原文地址:https://www.cnblogs.com/heml/p/3530874.html
Copyright © 2020-2023  润新知