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

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


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

    参考该博文:http://csrd.aliapp.com/?p=1675


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


未完成,随时待续

你可能感兴趣的:(代码,技巧)