C語(yǔ)言的編譯器會(huì)對(duì)變量和代碼進(jìn)行一定的優(yōu)化,我們看下面這個(gè)例子。

int a,b,c;
a=1;
b=a;
c=b;
這個(gè)程序正常運(yùn)行的時(shí)候會(huì)這樣子:先把a(bǔ)指向的內(nèi)存空間內(nèi)放入1
再把a(bǔ)指向的內(nèi)存空間里的數(shù)讀出來(lái)放到b指向的內(nèi)存空間,
最后再把b指向的內(nèi)存空間里的數(shù)讀出來(lái)放到c指向的內(nèi)存空間里。
然而編譯器要對(duì)這個(gè)程序進(jìn)行一定的優(yōu)化,編譯的時(shí)候,直接把1放入三個(gè)內(nèi)存空間中。
這樣子在正常運(yùn)行的時(shí)候確實(shí)是好事,但是總會(huì)有一些特殊的情況發(fā)生,比如,一個(gè)中斷程序突然改變了a的值,那么會(huì)發(fā)生這樣的情況:本來(lái)b和c應(yīng)該是a改變以后的值,可是編譯器優(yōu)化以后就變成了a,b,c都是1,這就很讓人郁悶了。
那么解決方法是,我們?cè)诙x變量的前面加個(gè)volatile這個(gè)關(guān)鍵字,比如:
volatile int a ;
這樣子以后編譯器遇到有a參與的運(yùn)算的時(shí)候就不再給你優(yōu)化了,這樣子可以保證你的程序按照你的預(yù)期進(jìn)行,可是如果你大量使用volatile的話,沒(méi)有優(yōu)化,就會(huì)降低程序運(yùn)行的效率。
本來(lái)C語(yǔ)言的運(yùn)行效率就比匯編低了不少,所以說(shuō)volatile在加的時(shí)候要盡量考慮好,因?yàn)楹芏喑绦蜻\(yùn)行的時(shí)候特別注重效率。
第二種優(yōu)化是restrict關(guān)鍵字,這個(gè)關(guān)鍵字只用來(lái)修飾指針才有用,修飾不同變量沒(méi)有任何用處。
當(dāng)你用restrict修飾的指針不會(huì)被別的東西給改變的時(shí)候,為了提高執(zhí)行的效率,就會(huì)在編譯的時(shí)候給你修改。
比如下面這個(gè)函數(shù):
int main(void)
{
int *restrict p1 , *restrict p2 ,a;
*p1=3;
*p2=5;
a=2+(*p2);
return 0 ;
}
這樣子以后,我們做了優(yōu)化,編譯器在編譯的時(shí)候就會(huì)直接把*p2轉(zhuǎn)換成5(因?yàn)楹竺鏇](méi)有指令能夠?qū)⑵湫薷模灾苯佑?來(lái)代替了*p2)
優(yōu)化有好處也有壞處,總之要謹(jǐn)慎使用。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。
當(dāng)前文章:C語(yǔ)言之編譯器優(yōu)化-創(chuàng)新互聯(lián)
路徑分享:http://chinadenli.net/article28/digscp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供建站公司、靜態(tài)網(wǎng)站、做網(wǎng)站、虛擬主機(jī)、微信公眾號(hào)、網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容