Linux内核里容易忽略的几个小知识点

LKD这本书虽然看过不少遍,但在工做中却发现一些小知识点却容易被忽略,包括本身在内,所以有必须把一些小知识点再强化小结一下。spa


一、字长
可以由机器一次处理完成的数据被称为字。某处理器多少“位”,一般指的就是它的字长。
出于某些历史和主观缘由,一些操做系统根据数据长度把数据划分为字节(8位)、字(16位)、双字(32位)、四字(64位)。操作系统

二、char的符号问题
C标准里char类型能够带符号或不带符号,由编译器或处理器决定。大部分体系上,char默认是带符号的,但在ARM处理器上,char是不带符号的。好比当char默认不带符号时,
char i = -1;
它实际上把255赋给了i(整数在内存里是以补码的形式存放的,正数的补码是它自己,负数的补码是取绝对值,取反再加1)内存

三、字节顺序
大端big-endian:高字节存在内存低地址,低字节存在内存高地址。
小端little-endian:高字节存在内存高低址,低字节存在内存低地址。
ARM和i386都是小端字节顺序。
下面例字能够判断机器的字节顺序:
int x = 1;
if(* (char *) &x == 1)
   /*小端字节顺序*/
else
   /*大端字节顺序*/编译器

(*和&运算符的优先级相同,但按自在右向左的方向结合)it

四、内核里的时间
不要假定内核中断发生的频率,应该使用HZ来计量时间,计量时间的正确方法是乘或除以HZ,好比
HZ,2*HZ,HZ/2,HZ/1O
编译