<li id="q4aaq"><object id="q4aaq"></object></li>
<xmp id="q4aaq">
  • <button id="q4aaq"><li id="q4aaq"></li></button>
  • <optgroup id="q4aaq"><sup id="q4aaq"></sup></optgroup><center id="q4aaq"><acronym id="q4aaq"></acronym></center>
  • <strong id="q4aaq"></strong>
  • <nav id="q4aaq"><menu id="q4aaq"></menu></nav>
    | |
        忘記之前從哪看過的一個文章說不要在for、while等循環內聲明變量,因為每次都會重復分配空間,很慢。

        今天發現一個模塊把變量聲明都放到while里面了,看了下代碼沒有發現必須聲明在里面的原因,于是開始懷疑是不是聲明在內外是差不多的。

        于是測試了一下:
    引用

    int main() {
        int i = 0;

        for(;i < 10000000; i++) {
            int b;
            b++;
        }

        return 1;
    }


    使用gcc 編譯,把int b放在循環內外試了試,用time ./a.out查看執行時間,發現用時基本相同。
    添加-O2優化選項,執行時間均縮減到之前的1/3,內外兩種方式時間依然相同。
    定義了一個struct實驗了下,結果相同
    也就是說棧上元素的操作不必糾結于變量聲明于何處。

    嘗試了下堆上元素操作,在預料之內:時間差距巨大,因為重復分配釋放內存。

    所以對于棧上元素,聲明放在循環里和循環外是一樣的。堆上元素不同,需注意。

    另,仍然需要注意一些計算操作需要放在循環外,比如求大小之類的,避免循環的每個周期重復計算。


    原因猜測:1, cpu對棧操作有優化,速度非常快。
    2,編譯器的基本優化中會優化(gcc沒有使用-O參數時仍會優化)
    具體原因待深究
    by snooda | 分類: c程序設計 | 評論(0) | 引用(0) | 閱讀(1445)
    發表評論
    表情
    emotemotemotemotemot
    emotemotemotemotemot
    emotemotemotemotemot
    emotemotemotemotemot
    emotemotemotemotemot
    打開HTML
    打開UBB
    打開表情
    隱藏
    記住我
    昵稱   密碼   游客無需密碼
    網址   電郵   [注冊]
                   

     
    色琪琪av男人的天堂-琪琪see色原网色原网站-天天谢天天谢天天要-欧美成人视频