记录一些有用的代码技巧,不定期更新

  1. list head, linux内核中的链表实现方法

    参考该博文:

    list head定义

  2. struct list_head {    struct list_head *next, *prev;};#define LIST_HEAD_INIT(name) { &(name), &(name) }

    使用方法

  3. 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指令清空处理器流水线的影响。

未完成,随时待续