1. 程式人生 > >《Linux核心情景分析》經典解說--程序

《Linux核心情景分析》經典解說--程序

get_current 使用巨集的原因
==================== include/asmi386/
current.h 6 13 ====================
6 static inline struct task_struct * get_current(void)
7 {
8 struct task_struct *current;
9 __asm__("andl %%esp,%0; ":"=r" (current) : "0" (~8191UL));
10 return current;
11 }
12
13 #define current get_current()

一條AND指令的執行只需4個CPU時鐘週期,而一條從暫存器到暫存器的MOV指令也才2個CPU時鐘週期,所有,像這樣在需要時才臨時把它計算出來反而效率比直接使用current全域性變數要高。