最近写代码,老是忘记short,long int 类型大小,还有kernel.h常用数据和函数。有点小时间,记录下来。
基本数据类型
这个表格是网上复制下来的。
arch | char | short | int | long | ptr | long-long | u8 | u16 | u32 | u64 |
i386 | 1 | 2 | 4 | 4 | 4 | 8 | 1 | 2 | 4 | 8 |
alpha | 1 | 2 | 4 | 8 | 8 | 8 | 1 | 2 | 4 | 8 |
armv4l | 1 | 2 | 4 | 4 | 4 | 8 | 1 | 2 | 4 | 8 |
ia64 | 1 | 2 | 4 | 8 | 8 | 8 | 1 | 2 | 4 | 8 |
m68k | 1 | 2 | 4 | 4 | 4 | 8 | 1 | 2 | 4 | 8 |
mips | 1 | 2 | 4 | 4 | 4 | 8 | 1 | 2 | 4 | 8 |
ppc | 1 | 2 | 4 | 4 | 4 | 8 | 1 | 2 | 4 | 8 |
sparc | 1 | 2 | 4 | 4 | 4 | 8 | 1 | 2 | 4 | 8 |
sparc64 | 1 | 2 | 4 | 4 | 4 | 8 | 1 | 2 | 4 | 8 |
总之
sizeof (char)=1,sizeof(short)=2,sizeof(int)=4,sizeof(long long)=8占用内存大小是固定的,
long和ptr占用内存大小跟cpu字长一致,如是32bit CPU,sizeof就是4;64bit CPU,sizeof就是8,
对于s8,s16,s32,s64和u8,u16,u32,u64这2组分别对应有符号和无符号的4个整数,长度分别为1,2,3,4,顾名思义,很好记。
size_t这是个CPU相关类型,32bit CPU sizeof是4, 64bit CPU sizeof是8
ssize_t是size_t的signed型。
基本常量
#define USHRT_MAX ((u16)(~0U)) //unsigned short int MAX
#define SHRT_MAX ((s16)(USHRT_MAX>>1)) //short int MAX
#define SHRT_MIN ((s16)(-SHRT_MAX - 1)) //short int MIN
#define INT_MAX ((int)(~0U>>1)) //int MAX
#define INT_MIN (-INT_MAX - 1) //int MIN
#define UINT_MAX (~0U) //unsigned int MAX
#define LONG_MAX ((long)(~0UL>>1)) //long int MAX
#define LONG_MIN (-LONG_MAX - 1) //long int MIN
#define ULONG_MAX (~0UL) //unsigned long int MAX
#define LLONG_MAX ((long long)(~0ULL>>1)) //long long int MAX
#define LLONG_MIN (-LLONG_MAX - 1) //long long int MIN
#define ULLONG_MAX (~0ULL) //unsigned long long int MAX
基本宏
#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]) + __must_be_array(arr))
{ \
typeof(x) quot = (x) / (denom);\
typeof(x) rem = (x) % (denom);\
(quot * (numer)) + ((rem * (numer)) / (denom));\
} \
)
#define lower_32_bits(n) ((u32)(n))
do { typeof(a) __tmp = (a); (a) = (b); (b) = __tmp; } while (0)
const typeof( ((type *)0)->member ) *__mptr = (ptr);\
(type *)( (char *)__mptr - offsetof(type,member) );})
数据对其相关
#define __ALIGN_KERNEL(x, a) __ALIGN_KERNEL_MASK(x, (typeof(x))(a) - 1)
#define __ALIGN_KERNEL_MASK(x, mask) (((x) + (mask)) & ~(mask))
#define IS_ALIGNED(x, a) (((x) & ((typeof(x))(a) - 1)) == 0)
{ \
const typeof(y) __y = y;\
(((x) + (__y - 1)) / __y) * __y;\
} \
)
#define rounddown(x, y) ( \
{ \
typeof(x) __x = (x);\
__x - (__x % (y));\
} \
)