<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                ## C語言各種變量類型應用 [TOC] ### static 定義全局變量 > 定義好的變量引用的時候都是可執行的 ~~~C int main(){ void fun(); for(int i=0;i<3;i++) fun(); return 0; } void fun(){ int i=0; static int static_i = 0; // 全局調用 printf("%d=", i); printf("%d\n", static_i); i++; static_i++; } 結果:i= 0、0、 0 static_i=0、1、2 ~~~ ~~~ int main(){ int num=2; for(int i=0;i<3;i++){ printf("原始num=%d\n", num); num++; { static int num=1; // 內部調用 printf("static的num=%d\n", num); num++; } } return 0; } 結果:num=2、3、4 static num=1、2、3 ~~~ ### auto 定義局部變量 > 定義的局部變量不受外部變量的影響 ~~~ int main() { int num=2; for(int i=0;i<3;i++){ printf("num變量為%d\n", num); num++; { auto int num=1; // 局部變量局部使用 printf("auto變量num=%d\n", num); num++; } } return 0; } 結果: num=2、3、4 auto num=1、1、1 ~~~ ### external外鏈屬性 > C語言3種鏈接屬性: 外部(external), 內部(internal),無設置(none) > C語言中有3種鏈接屬性: 外部(external), 內部(internal),無設置(none) > 外部(external): 使用extern關鍵字 > 內部(internal): 使用static關鍵字 ~~~ int a,b,c; // external 屬性 void add(){ int a=3; c=a+b; } int main() { a=b=4; add(); printf("c=%d\n", c); return 0; } 結果: c=7 ~~~ ### register變量(涉及內存CPU) > 一般情況下,變量的值是存儲在內存中的,CPU 每次使用數據都要從內存中讀取。如果有一些變量使用非常頻繁,從內存中讀取就會消耗很多時間,例如 for 循環中的增量控制: ~~~ int i; for(i=0; i<1000; i++){ // Some Code } ~~~ > 執行這段代碼,CPU 為了獲得 i,會讀取 1000 次內存。 #### 解決思路: > 為了解決這個問題,可以將使用頻繁的變量放在CPU的通用寄存器中,這樣使用該變量時就不必訪問內存,直接從寄存器中讀取,大大提高程序的運行效率。 #### 寄存器、緩存、內存 > 為了加深對 register 變量的理解,這里有必要講一下CPU寄存器。 > 按照與CPU的遠近來分,離CPU最近的是寄存器,然后是緩存,最后是內存。 > 寄存器是最貼近CPU的,而且CPU只在寄存器中進行存取。寄存的意思是暫時存放數據,不用每次都從內存中取,它是一個臨時的存放數據的空間。 > 而寄存器的數據又來源于內存,于是 CPU <-- 寄存器 <-- 內存,這就是它們之間的信息交換。 > 那么為什么還需要緩存呢?因為如果頻繁地操作內存中同一地址上的數據會影響速度,于是就在寄存器和內存之間設置一個緩存,把使用頻繁的數據暫時保存到緩存,如果寄存器需要讀取內存中同一地址上的數據,就不用大老遠地再去訪問內存,直接從緩存中讀取即可。 > 緩存的速度遠高于內存,價格也是如此。 > 注意:緩存的容量是有限的,寄存器只能從緩存中讀取到部分數據,對于使用不是很頻繁的數據,會繞過緩存,直接到內存中讀取。所以不是每次都能從緩存中得到數據,這就是緩存的命中率,能夠從緩存中讀取就命中,否則就沒命中。 > 關于緩存的命中率又是一門學問,哪些數據保留在緩存,哪些數據不保留,都有復雜的算法。 > > 注意:上面所說的CPU是指CPU核心,從市場上購買的CPU已是封裝好的套件,附帶了寄存器和緩存,插到主板上就可以用。 關于寄存器變量有以下事項需要注意: * 1) 為寄存器變量分配寄存器是動態完成的,因此,只有局部變量和形式參數才能定義為寄存器變量。 * 2) 局部靜態變量不能定義為寄存器變量,因為一個變量只能聲明為一種存儲類別。 * 3) 寄存器的長度一般和機器的字長一致,所以,只有較短的類型如int、char、short等才適合定義為寄存器變量,諸如double等較大的類型,不推薦將其定義為寄存器類型。 * 4) CPU的寄存器數目有限,因此,即使定義了寄存器變量,編譯器可能并不真正為其分配寄存器,而是將其當做普通的auto變量來對待,為其分配棧內存。當然,有些優秀的編譯器,能自動識別使用頻繁的變量,如循環控制變量等,在有可用的寄存器時,即使沒有使用 register 關鍵字,也自動為其分配寄存器,無須由程序員來指定。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看