各位开发者大家好,今天给大家分享一下,嵌入式C语言中结构体的使用方法。
第一个:内存对齐
内存对齐是指一个数据类型在内存中存放时,对其地址的要求。简单来说内存对齐就是使得其内存地址是该类型大小的整数倍,例如 double 类型的变量,其内存地址需要是8的倍数(double大小为8字节)。
内存对齐的主要目的就是满足部分CPU对内存读写的要求以及优化CPU读取内存的效率。在ARM架构下,如果读取的内存是非对齐的(例如一个4字节的int 落在一个奇数的内存地址上)则会直接抛出异常。
struct Node{ char mark; int size; char flag; };
由于int在本机器上占用4个字节,所以起始地址必须是4的倍数,例如:0x7ffeef361260。所以第一个char类型后面会有3字节的内存空隙。而最后一个char类型后会有3字节空隙的原因则是遵循另一个原则:结构体的大小为对齐系数的整数倍。在Linux平台下,该值通常为4,所以Node的大小必须为4的整数倍,故填充了3字节的空隙。
不过,我们可以通过调整结构体成员变量的定义顺序,来减少内存空隙ÿ