您好,登錄后才能下訂單哦!
說到內(nèi)聯(lián),可能你還停在十幾年前甚至二十多年前的C++教典,c++有內(nèi)聯(lián)關(guān)鍵字inline,甚至還用來與c做區(qū)分。c99開始c引入inline,gcc比c99早實(shí)現(xiàn)對inline支持,vc中c沒有關(guān)鍵字inline,inline只能用于c++,但有另一關(guān)鍵字__inline,但若你要用vc編譯gcc下c代碼,遇到cl抱怨不識別inline,只要將inline在預(yù)編譯宏中定義為__inline也就可以了。
gcc編譯器屬性中還有一個(gè)noinline,有了inline為什么還要來一個(gè)noinline。沒有用inline不就等于noinline了嗎。還有always_inline屬性。因?yàn)樵趯?shí)際中,定義為inline也不一定統(tǒng)統(tǒng)都會被內(nèi)聯(lián),內(nèi)不內(nèi)聯(lián)最后是由gcc編譯器決定,只是你的聲明會影響它的決定。同樣你沒有定義為inline,函數(shù)就不一定都隔離內(nèi)聯(lián),編譯器在優(yōu)化中通常會為你決定內(nèi)聯(lián)了一些函數(shù),不論這個(gè)函數(shù)體積是大是小。noinline和always_inline屬性就是字面意義那樣了。
正好近日調(diào)試ffmpeg代碼,碰上一例子,用來作例證:
ffmpeg是個(gè)c代碼項(xiàng)目。
avformat_write_header是一個(gè)只有十行的函數(shù),就是調(diào)用其它函數(shù)。
init_muxer是個(gè)體積比較大的靜態(tài)函數(shù),沒有定義為內(nèi)聯(lián),卻內(nèi)聯(lián)到了一個(gè)體積很小的函數(shù)(avformat_write_header)內(nèi)。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。