在c語言中,使用函數指針是否可以提高函數的調用速度 ?
01-05
之前聽人這樣講過,有疑問不理解
更慢了
函數指針更慢。
普通的函數調用會編譯成直接跳轉指令,例如 x86中的CALL LABLE,或者Arm中的BL LABLE。而函數指針會編譯成間接跳轉指令,例如x86中是CALL REG,Arm中就是BLR REG. 間接跳轉的目標是在寄存器或內存中的,因此為了得到跳轉目標,會引入地址的計算和訪存。而直接跳轉的目標是編碼在指令內的,不需要任何多餘的計算和訪存。因此一般而言間接跳轉的效率較低。
當然函數指針的也有其優點。其優點就是可以有多個調用目標。因為間接跳轉的目標在內存或寄存器中,是可以被修改的。而直接跳轉的目標有且只有一個。在有多個目標的需求時,就只能使用函數指針。慢主要不是慢在那一條指令上,是它妨礙了編譯器優化。
其實c中的函數名就是地址!函數指針就是存函數地址的變數!函數指針不是這樣用的,這樣用當然變慢,脫了褲子放屁。
推薦閱讀:
※C++中如何定義指向函數指針的指針?
※如何有效的練習並且提升寫代碼的能力?
※初始化、顯式初始化、隱式初始化。這幾個區別是什麼?