C++中的volatile做什麼用的?(看書沒看懂)

來源:互聯網
上載者:User
  • 問題內容:C++中的volatile做什麼用的?(看書沒看懂)
  • 原討論連結:http://community.csdn.net/expert/topicview1.asp?id=4340502
  • 所屬論壇:新手樂園     審核組:C/C++
  • 提問者:iwodgirl     解決者:goodluckyxl
  • 感謝:codearts、snowbirdfly、goodluckyxl
  • 關鍵字:
  • 答案:

    #include<iostream.h>
    #include<stdio.h>
    class VolatileFun{
        public :
            int val;
            volatile int f8();
    };

    volatile int VolatileFun::f8(){return val;}

    void main()
    {
        VolatileFun s;
        s.val=89;
        volatile int i=s.f8();
        i=23;                   //我自己加上去的,也可運行,且改變了i的值
        cout<<i<<endl;
        getchar();
    }

    新手問題,請知道的人指點!謝謝
    ---------------------------------------------------------------
    1、volatile 是保證訪問的變數不被編譯器最佳化
    比如申請的變數 a = 1; 如果嵌入彙編饒開編譯器
    將a地址內容1改變掉
    而你不加volatile就還是原來的1 
    如果加了則會保證每次資料均是從a的地址處讀出 
    4、寄存器操作一定要加!  一般的驅動程式裡的連接埠操作也需要加, volatile只是保證你每次取變數地址都是從此變數的源地址取值!  比如聲明 一個變數uint16 PortAddress=0x0001;  下面的代碼中再也沒有對 PortAddress進行賦值,如果沒加 volatile,則你每次用PortAddress變數時系統會直接取1, 而不是去PortAddress的地址去取他的值,如果 PortAddress是硬體相關的,則可能會因為硬體的原因把他的值改變了(不再是0x0001),從而造成運行出錯!

    MY VIEW: 
         簡單的一句話 取消編譯器對此修飾變數的任何最佳化
         所有對此資料操作都去相應地址中讀寫 而不會取自因最佳化而暫存的寄存器中

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.