一、多个数据组合的空间
1、相同数据类型组合的空间
c语言提供数组的概念来封装具有多个相同数据类型的空间,但是c语言不承认有数组类型。
2、不同数组类型组合的空间
在原子类型基础上,若能将更多的类型打包成一个类型,那么访问和程序设计时,将会更容易,根据打包形势分成结构体(struct)和共用体(union)。
二、
typedef ;
(默认规则)结构体 为了提高内存访问效率,在软件编译时,会引入字节对齐的规则;
1、结构体中最大的基本数据类型作为对齐标准;
2、根据/2原则,依次填充;
调整结构体对齐使其紧凑即可实现数据紧凑合并;
也可以指定规则,可以指定对齐方式;#pragma pack (1)【#预处理处理】包按1b对齐来分;
三、共用体封装方式,访问方法;
位域;
位域是一种在结构体中定义成员时,可以指定其占用的位数的技术。通过使用位域,可以在一定程度上节省内存空间,因为可以将多个成员压缩在同一个字节或单词中。在定义位域时,需要指定成员名、占用的位数和数据类型。例如:
struct { unsigned int flag1 : 1; unsigned int flag2 : 2; unsigned int flag3 : 3; } myFlags;
上面的代码定义了一个结构体 myFlags
,其中包含三个位域成员 flag1
、flag2
和 flag3
,它们分别占用了 1、2 和 3 个二进制位。这样,可以使用一个字节(8 个二进制位)来存储这三个成员的值。
需要注意的是,不同编译器对位域的实现可能会有所不同,因此在使用位域时需要注意可移植性。另外,位域的使用也可能会影响程序的性能,因为访问位域成员需要进行位运算,而这可能比访问普通成员更耗时。
芯片里一个区域控制一个功能;内存中以16进制表示出来,运用了unsigned int b1:3(分配空间三位);unsigned int b1:4(分配空间4位)这个语法,可以控制寄存器位的数据;也可以对整个32位赋值(对于32位寄存器);
共用体内存共用,先定义的会被后定义的覆盖;val会b1定义的值覆盖