zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    c/c++字节序转换(转)
    O_DIRECT与O_SYNC区别(转)
    TCMalloc小记(转)
    内存优化总结:ptmalloc、tcmalloc和jemalloc(转)
    不依赖三方库从图像数据中获取宽高-gif、bmp、png、jepg
    Linux查看物理CPU个数、核数、逻辑CPU个数
    unix环境高级编程-3.10-文件共享(转)
    TF_Server gRPC failed, call return code:8:Received message larger than max (45129801 vs. 4194304)
    google doc上的云转换
    telnet 退出命令
  • 原文地址:https://www.cnblogs.com/heml/p/3530874.html
Copyright © 2011-2022 走看看