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
  • 相关阅读:
    python pickle模块
    python struct模块
    python threading模块
    python queue模块
    python3 requests模块 基本操作
    python json模块
    C语言回调函数
    工厂方法模式
    git fetch, git pull 以及 FETCH_HEAD
    git删除远程文件夹或文件的方法
  • 原文地址:https://www.cnblogs.com/heml/p/3530874.html
Copyright © 2011-2022 走看看