溫馨提示×

溫馨提示×

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

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

C語言 之編譯器優化

發布時間:2020-06-15 00:03:07 來源:網絡 閱讀:957 作者:飛寞 欄目:開發技術

  C語言的編譯器會對變量和代碼進行一定的優化,我們看下面這個例子。

int a,b,c;

a=1;

b=a;

c=b;

  這個程序正常運行的時候會這樣子:先把a指向的內存空間內放入1

  再把a指向的內存空間里的數讀出來放到b指向的內存空間,

  最后再把b指向的內存空間里的數讀出來放到c指向的內存空間里。


然而編譯器要對這個程序進行一定的優化,編譯的時候,直接把1放入三個內存空間中。

這樣子在正常運行的時候確實是好事,但是總會有一些特殊的情況發生,比如,一個中斷程序突然改變了a的值,那么會發生這樣的情況:本來b和c應該是a改變以后的值,可是編譯器優化以后就變成了a,b,c都是1,這就很讓人郁悶了。


  那么解決方法是,我們在定義變量的前面加個volatile這個關鍵字,比如:

volatile int a ;

  這樣子以后編譯器遇到有a參與的運算的時候就不再給你優化了,這樣子可以保證你的程序按照你的預期進行,可是如果你大量使用volatile的話,沒有優化,就會降低程序運行的效率。

  本來C語言的運行效率就比匯編低了不少,所以說volatile在加的時候要盡量考慮好,因為很多程序運行的時候特別注重效率。


  第二種優化是restrict關鍵字,這個關鍵字只用來修飾指針才有用,修飾不同變量沒有任何用處。

當你用restrict修飾的指針不會被別的東西給改變的時候,為了提高執行的效率,就會在編譯的時候給你修改。

比如下面這個函數:

int main(void)

{

   int *restrict p1 , *restrict p2 ,a;

   *p1=3;

   *p2=5;

   a=2+(*p2);

   return 0 ;

}

  這樣子以后,我們做了優化,編譯器在編譯的時候就會直接把*p2轉換成5(因為后面沒有指令能夠將其修改,所以直接用5來代替了*p2)

  優化有好處也有壞處,總之要謹慎使用。


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女