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体系结构支持大端模式和小端模式两种内存模式。

posted @ 2021-08-01 18:59  孤情剑客  阅读(336)  评论(0)    收藏  举报