欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

联合体(各成员类型数据共用一块内存的特殊结构体)

程序员文章站 2022-07-12 23:08:22
...

什么是联合体

  1. 联合体是一个结构;
  2. 它的所有成员相对于基地址的偏移量都为0(相对于普通结构体而言,联合体中各成员类型数据共用一个内存首地址);
  3. 此结构空间要大到足够容纳最"宽"的成员;
  4. 其对齐方式要适合其中所有的成员;

联合体在内存空间中的大小

当设置内存对齐模式为8的时候:
联合体所占内存空间的大小=内存对齐(结构体内最"宽"的成员(10Byte))=16Byte

#include "stdio.h"
#pragma pack(8)

int main()
{
    union _test_union{
        double c;     //8Byte
        char b[10];   //10Byte
    } test_union;

    printf("size of %lu\n",sizeof(test_union)); // 16Byte

    return 0;
}

当设置内存对齐模式为2的时候(#pragma pack(2)):
联合体所占内存大小=内存对齐(结构体内最"宽"的成员(10Byte))=10Byte
总之,联合体所占内存空间的大小是以其最宽成员大小作内存对齐后的大小。

相关标签: C语言