一、字长和数据类型 字指的是机器一次处理数据的位数,如64位芯片的字长为64bit,即8字节。c 语言定义的long整型总是等于机器的字长。ANSI C标准规定,一个char的长度一定是1字节。int (short)在目前linux所有支持的体系结构中都是32(16)位,虽然没有明确规定。注意long 和 指针 会在32位和64位中变化,所以不要假设 sizeof( int ) == sizeof(long) ==sizeof(p)。 linux内核用typedef实现了长度明确的数据类型,如s8(带符号字节),u64(无符号64位整型)等。 二、处理不透明类型原则(如dev_t,gid_t等) 不要假设该类型的长度,因为在不同系统中其长度不一,且内核开发者可随意修改。不要将该类型转化为其对应的C标准使用。编码时保证其实际存储空间和格式变化时,代码不受影响 三、数据对齐 参考关于结构体内存对齐总结,C结构体中数据的内存对齐问题。 四、字节序问题 最高有效字节放在低位上的为大端,反之为小端。x86用的就是小端。网络字节序都是大端传输。判断给定机器主机字节序的代码: int x = 1; if(*(*char)&x == 1) printf("little-endian"); else printf("big-endian"); //常用宏命 u32 __cpu_to_be32(u32) /* cpu字节序转为大端 */ u32 __cpu_to_le32(u32) /* cpu字节序转为小端 */ u32 __be32_to_cpu(u32) /* 大端转为cpu字节序 */ u32 __le32_to_cpu(u32) /* 小端转为cpu字节序 */ 五、时间,页大小,处理器排序等