共用体结构体的内存分配

本文详细探讨了C语言中关于共用体和结构体的内存分配规则,包括默认的内存对齐方式以及n字节对齐的情况。通过实例分析了不同数据类型的成员如何影响整体的内存占用,揭示了结构体和共用体在内存布局上的差异。
摘要由CSDN通过智能技术生成

1. 共用体内存分配

共用体表示几个变量共用一个内存位置,在不同的时间保存不同的数据类型和不同长度的变量。在union中,所有的共用体成员共用一个空间,并且同一时间只能储存其中一个成员变量的值。
  下例表示声明一个共用体foo:
  union foo  {
  int i;
  char c;
  double k;
  };
  再用已声明的共用体可定义共用体变量。
  例如用上面说明的共用体定义一个名为bar的共用体变量, 可写成:
  union foo bar;
  在共用体变量bar中, 整型变量i和字符变量c共用同一内存位置。
  当一个共用体被声明时, 编译程序自动地产生一个变量, 其长度为联合中最大的变量长度的整数倍。以上例而言,最大长度是double数据类型,所以foo的内存空间就是double型的长度。
  union foo  {
  char s[10];
  int i;
  };
  在这个union中,foo的内存空间的长度为12,是int型的3倍,而并不是数组的长度10,因为char[10]占了10个字节,那么以int型的4字节对齐就应该是int的3倍12字节。若把int改为double,则foo的内存空间为16,是double型的两倍。

示例1:
   Union data1
 {
  double  d;
 int    i;
 char   c1;
 char   c2[9];
 };


  sizeof(uniondata1)的值为16.在编译器默认设置的情况下,该共用体最大基本类型为double,它占8字节,所以此共用体以8来对齐。字符数组c2占9个字节,那么整个共用体应该占9个字节,但按照对齐原则,实际分配给它的内存为16字节。


2. 结构体内存分配

“结构”是一种构造类型,它是由若干“成员”组成的。 每一个成员可以是一个基本数据类型或者又是一个构造类型。 结构既是一种“构造”而成的数据类型, 那么在说明和使用之前必须先定义它,也就是构造它。如同在说明和调用函数之前要先定义函数一样。
结构定义之后,即可进行变量说明。 凡说明为结构stu的变量都由上述4个成员组成。由此可见, 结构是一种复杂的数据类型,是数目固定,类型不同的若干有序变量的集合。
  请看下面的结构:
  struct MyStruct {
  double dda1;
  char dda;
  int type;
  };
 对结构MyStruct采用sizeof会出现什么结果呢?sizeof(MyStruct)为多少呢?也许你会这样求:                    sizeof(MyStruct)=sizeof(double)+sizeof(char)+sizeof(int)=13
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值