您的位置:首页 > 运维架构 > Linux

Linux数据类型的移植

2016-03-02 21:28 399 查看
arm平台下的数据类型重定义

typedef signed char s8

typedef unsigned char u8

typedef signed short s16

typedef unsigned short u16

typedef signed int  s32

typedef unsigned int u32

typedef signed long long s64

typedef unsigned long long u64

ppc平台下的数据类型重定义

typedef signed char s8

typedef unsigned char u8

typedef signed short s16

typedef unsigned short u16

typedef signed int  s32

typedef unsigned int u32

typedef signed long  s64

typedef unsigned long  u64

由于以上数据类型是针对不同体系结构定义的,因此在任何平台下对其用sizeof运算的结果是不变的,是确定长度的数据类型。但是以上这些数据类型只能在内核空间使用,在Linux用户空间中,如果要使用确定长度的数据类型,应该使用上述类型加“__(双下划线)”版本,如__u32、__u16、__u8。其余Linux中还存在_t后缀的重定义数据类型。

结构体对界

在C语言中使用结构体,一定要注意结构体的对界。因为结构体中的成员变量可能是基本变量页有可能是复合类型变量。 对于结构体,编译器很可能自动进行成员变量的对其,以提高存取效率。默认情况下,编译器为结构体的成员变量按照其自然对界条件分配空间。各个成员按照它们被生命的顺序在内存中顺序存储,第一个成员的地址和整个结构的地址相同。自然对界按照结构体的成员中sizeof()最大的成员对其(如果sizeof大于CPU的字长,仍然按照CPU字长对齐)

在Linux内核编程中,为了防止编译器自动对齐在结构体的数据间插入间隙,可以使用_ _attribute_ _((packed))定义结构体,如:

struct {

            ..........;

           ...........;

}_ _attribute_ _((packed)) scsi;不要在数据间插入间隙

处理器大小端模式

小端模式:高字节存放在高地址,低字节存放在低地址

大端模式:高字节存放在低地址,低字节存放在高地址

内存页面大小

一般情况下,内存页面的大小是4KB(即PAGE_SIZE定义为4KB),实际上,页面的大小在一个4KB~64KB的范围内是可变的,即使在相同平台下页可以定义不同的PAGE_SIZE和PAGE_SHIFT。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: