记录一些有用的代码技巧,不定期更新
list head, linux内核中的链表实现方法
参考该博文:
list head定义
struct list_head { struct list_head *next, *prev;};#define LIST_HEAD_INIT(name) { &(name), &(name) }
使用方法
struct user_t { data domain; struct list_head node;};struct list_head g_user_list = LIST_HEAD_INIT(g_user_list);
插入
static inline void list_add(struct list_head *new, struct list_head *head);static inline void list_add_tail(struct list_head *new, struct list_head *head);
取成员
#define list_entry(ptr, type, member) \
container_of(ptr, type, member)
遍历
#define list_for_each(pos, head) \
for (pos = (head)->next, prefetch(pos->next); pos != (head); \
pos = pos->next, prefetch(pos->next))
不一一赘述了
2. 长度为0的数组
struct line { int length; char contents[0]; };struct line *thisline = (struct line *)malloc (sizeof (struct line) + this_length);thisline->length = this_length;
3. 高效分支判断
#define likely(x) __builtin_expect(!!(x), 1)#define unlikely(x) __builtin_expect(!!(x), 0)long __builtin_expect (long EXP, long C)
优化的原理是:通过调整生成汇编代码的顺序,将经常发生的分支代码放在cmp指令之后顺序执行,将不经常发生的分支代码通过jump指令跳过去,从而降低jump指令清空处理器流水线的影响。
未完成,随时待续