關於 ++i 快於 i++

當然,很多時候我們有的代碼用C++提交通過了,但是G++卻失敗了呢?衆所周知,不同的編譯器,會對代碼做出一些不同的優化。舉一個最簡單的例子。針對單個語句(注意,是單個語句,不是包含在語句中的那種前++和後++):

a: a++;b: ++a;
一般的講,我們都知道,這兩條語句的最終結果是一樣的,就是a自己增加了1。但是,兩者的差距還是有的。如果從標準C的角度去理解。a++這個語句等同於

a: a = a + 1
也就是說,我是先調用,再自增。在調用過程中,會申請一個新的數據地址,用於存放臨時的變量a’,然後在把a’加1,之後在把a’賦值給a。

但是++a這個語句不需要這麼麻煩。因爲他是先自增,後調用,也就是省去了申請新地址的功夫。所以理論上,二者的時間消耗是有差異的,如果你是使用標準C的編譯方式,就可以發現這個差異。畢竟,申請臨時內存這個操作耗費的時間,遠遠比令已知內存的數據進行一個改變要長的多。

但是編譯器的優化就體現在了這種本身結果相同卻耗時有差異的地方。如果你使用gcc來編譯,結果你會發現前++與後++二者基本上沒有差異。這就是編譯器的優化中的冰山一角了。事實上還有很多優化的地方。

轉自http://www.cnblogs.com/zswbky/p/5432016.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章