溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Linux程序設(shè)計代碼怎么優(yōu)化

發(fā)布時間:2021-09-04 10:29:12 來源:億速云 閱讀:99 作者:chen 欄目:系統(tǒng)運維

本篇內(nèi)容主要講解“Linux程序設(shè)計代碼怎么優(yōu)化”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“Linux程序設(shè)計代碼怎么優(yōu)化”吧!

全局變量VS函數(shù)參數(shù)

全局變量在Linux下的驅(qū)動編程里邊,用的是非常多,例如中斷服務(wù)函數(shù)ISR,基本上都可以用全局變量來作為數(shù)據(jù)的更新,及事件的觸發(fā)。給函數(shù)傳遞參數(shù)的效率一般來說,要低于直接使用全局變量,尤其是參數(shù)的數(shù)目太多的時候。參數(shù)傳遞,是需要先將參數(shù)push到stack中,等程序運行完畢,再從stack中pull出來,過程上要比global  variable復(fù)雜。但是,全局變量過多的話,這里邊就設(shè)計到管理的問題了,到后面就很難去控制這些變量的修改,這對于函數(shù)的模塊化有不利的影響。

i=i+1;  i++;  i--;

這三個語句都通常引用在for()或者是while()里邊,從執(zhí)行效率上來說 3》2》1

這和最終生成的匯編語言有關(guān),一般來說,影響不會太夸張。

switch-case語句

switch-case語句,也是用的非常多的語句。

這里首先的優(yōu)化原則就是:將發(fā)生概率***的條件,放在***判斷的位置。這樣就能夠有效的降低比較的次數(shù),達(dá)到更優(yōu)的效果?;蛘?,有一種更好的方法來替代switch-case語句的方法,就是利用查表

比如

switch(msg_type) { case DATA:       handle_data_fun();       break; case RTS:       handle_rts_fun();       break;        ....... }

這里就可以用函數(shù)指針和查表的方式,獲得handle_fun的方法來替代。

處理函數(shù)都在初始化的過程中,放到*handle_fun[MAX]相應(yīng)的位置上

int (*handle_fun[MAX])(struct msg_t *msg);  int msg_type = msg->type;  handle_fun[msg_type](msg);//即可

這種方法,在Linux的網(wǎng)絡(luò)協(xié)議里邊,用的非常多,一般對應(yīng)的查表方式為hash表結(jié)構(gòu)。

sturct 和 union的使用

sturcut  使用,一定要考慮到字節(jié)對其的問題,struct中,不同的安排順序,sizeof是不同的所以要調(diào)整好位置,盡量保證struct的size最小。

union的使用,比如對不同包的數(shù)據(jù)結(jié)構(gòu)上,是不一樣的,所以盡量使用union來區(qū)分不同的包結(jié)構(gòu)這樣對程序的可讀性比較好。

volatile的使用

這在驅(qū)動編程方面是非常有用的一個標(biāo)志。目的是不讓編譯器compiler把當(dāng)前的變量優(yōu)化掉。尤其是涉及到硬件寄存器的值的時候。

乘除運算的簡化

乘除運算,對arm來說太致命,arm的乘除都生成一堆的匯編指令才能完成。所以一般可以通過位操作,比如移位,取低位來進(jìn)行適當(dāng)?shù)幕?。比?a*8 =  a<<3;

Inline 函數(shù)

在實現(xiàn)比較簡單功能的函數(shù),以及那些調(diào)用非常平凡的函數(shù),都可以在函數(shù)前加入inline的標(biāo)識。這樣在產(chǎn)生匯編的時候,能夠更有效。也可以替代較復(fù)雜的define語句。

到此,相信大家對“Linux程序設(shè)計代碼怎么優(yōu)化”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI