日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

c语言编译器 代码优化,C语言 之编译器优化

發(fā)布時(shí)間:2024/8/1 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言编译器 代码优化,C语言 之编译器优化 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

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的話(huà),沒(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ū)⑵湫薷?#xff0c;所以直接用5來(lái)代替了*p2)

優(yōu)化有好處也有壞處,總之要謹(jǐn)慎使用。

總結(jié)

以上是生活随笔為你收集整理的c语言编译器 代码优化,C语言 之编译器优化的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。