4、字节问题
1、字长和数据类型
能够由计算机一次完成处理的数据称为字,不同体系结构的字长通常会有所区别。例如现在通用的处理器字长为32位。
为了解决不同的体系结构有不同字长的问题,嵌入式Linux中给出两种数据类型,其一是不透明数据类型,其二是长度明确的数据类型。
不透明数据类型隐藏了他们内部格式或结构。在C语言中,他们就像黑盒一样,开发者们利用typedef声明一个类型,把它叫作不透明数据类型,并希望其它开发者不要重新将其转化为对应的那个标准C语言类型。
例如用来保存进程标识符的pid_t类型的实际长度就被隐藏起来了,尽管任何人都可以揭开它的面纱,因为其实它就是一个int型数据。
长度明确的数据类型也很常见。作为一个程序员,通常在程序员中需要操作硬件设备,这是就必须明确知道数据的长度。
嵌入式Linux内核在“asm/types.h”中定义了这些长度明确的类型,下表是这些类型的完整说明:
|
类型 |
描述 |
类型 |
描述 |
|
s8 |
有符号字节 |
s32 |
有符号32位整数 |
|
u8 |
无符号字节 |
u32 |
无符号32位整数 |
|
s16 |
有符号16位整数 |
s64 |
有符号64位整数 |
|
u16 |
无符号16位整数 |
u64 |
无符号64位整数 |
2、数据对齐
对齐是内存数据与内存中的相对位置相关的问题。如果一个变量的内存地址正好是它长度的整数倍,他就被称作是自然对齐的,例如,对于一个32位(4个字节)类型的数据,如果它在内存中的地址刚好可以被4整除(最低两位是0),那它就是自然对其的。
一些体系结构对对齐的要求非常严格。通常基于RISC的系统载入未对齐的数据会导致处理器陷入一种可处理的错误,还有一些系统可以访问没有对齐的数据,但性能会下降。编写可移植性高的代码要避免对齐问题,保证所有的类型都能够自然对齐。
3、字节序
字节顺序是指一个字中各个字节的顺序,有大端模式和小端模式。大端模式是低地址存放数据的高字节,高地址存放数据的低字节。小端模式低地址存放数据的低字节,高地址存放数据的高字节。
ARM体系结构支持大端模式和小端模式两种内存模式。

浙公网安备 33010602011771号