C语言笔记 2- Union 和大小端
参考文档:
union (联合体)和 struct(结构体) 的用法较为类似,不同在于:
- union 所有成员共用一段内存,其占用内存总等于内部最大成员所占用的内存大小,修改一个成员会影响所有成员(即共用体使用了内存覆盖技术,同一时刻只能保存一个成员的值,如果对新的成员赋值,就会把原来成员的值覆盖掉);
- struct 每个成员占用自己的内存空间,其占用内存大于等于所有成员占用的内存之和,成员之间不会互相影响。
Union(联合体)的定义格式为:
union unionName{ type1 elemName1; type2 elemName2; ... typen elemNameN; };
N个成员共享 union unionName 所定义的变量的内存。
举个例子:
union 在内存中的分布要结合大小端来理解:
以上面的 data 为例,在小端机器中,各个成员在内存中的分布如下: 成员 n、ch、m 在内存中“对齐”到一头,对 ch 赋值修改的是前一个字节,对 m 赋值修改的是前两个字节,对 n 赋值修改的是全部字节。也就是说,ch、m 会影响到 n 的一部分数据,而 n 会影响到 ch、m 的全部数据。 在大端模式机器中,各个成员在内存中的分布如下:
上一篇:
通过多线程提高代码的执行效率例子
下一篇:
java中多线程理解总结