關於C語言的細節問題,關於C語言的一個細節問題

時間 2021-10-14 21:23:07

1樓:

不用每次都開闢記憶體空間,存放b+c的值,編譯器可以做到將b+c的結果存放在暫存器中,這樣既方便又高效。

a

編譯器不可能把前者優化為後者,因為那樣做編譯的結果可能是錯誤的。

2樓:

可能會快一點,但快不了多少,因為cpu運算是把資料從記憶體(或硬碟)取到暫存器裡,再運算的。

執行a>b+c時並不會在記憶體中開闢新的空間存放b+c的結果,結果是放在暫存器裡,再將暫存器ax(不一定是這個暫存器)裡,把a變數的值也取到暫存器裡dx,兩個暫存器再比較。

比後面的比較,前者要兩條取b、c變數的值到暫存器和兩個暫存器相加共三條指令,後者要取d變數的值到暫存器一條指令,就是慢了兩條指令。

但是編譯時選擇release版本的,編譯器會優化,可能b+c(或d)的值一直在暫存器中,那速度就一樣了,可以去看看彙編**,就知道具體怎麼執行的了。

3樓:匿名使用者

對於舊版本的編譯器,可能就要反覆開闢-釋放n次空間,還要計算n次b+c的值;但是對版本較新的編譯器,也許就是你說的第二種可能。現在編譯器的優化功能很強大的,有時甚至連你想不到的地方都能優化的。

但是我個人認為不應該過份依賴編譯器的優化功能,畢竟編譯器的優化功能也是由人來實現的,還是要自己做到心中有數,才能寫出好的**。

4樓:匿名使用者

這個得看迴圈的次數,如果a和b+c的值相差很小,就不見得會效率,如果差距頗大是會提效的

5樓:匿名使用者

當然可以,這樣的話就申明瞭一個變數,也就是有記憶體空間來儲存b+c的值。不過要是你for 迴圈裡b,c的值會發生改變的話那就不能這樣了!

6樓:匿名使用者

下面的應該效率高些

但是不一定要重複n次,編譯器會優化的

關於c語言的問題,關於C語言的問題

鷹弈 1 有定義 int n 0,p n,q p 則以下選項中,正確的賦值語句是 d a.p 1 b.q 2 c.q p d.p 5 解 p為一級指標,其中p為指標的地址,q為二級指標,其中 q為指標的地址,只能給變數或指標變數賦值,不能給地址賦值,所謂地址,就是由acs碼構成,簡單的說,就是每個人...

關於c語言的程式設計,關於C語言的程式設計問題?

執行示例 原始碼如下 include stdio.h int main printf n return 0 望採納。int用來定義整型變數 整數 float用來定義浮點型變數 實數 float和int一樣是用來定義變數的,它不是函式.賦值語句value 700 weight 14.5833之所以不在...

關於c語言的問題,一個關於c語言的問題

彬彬有禮 對於你的疑問,我一個一個幫你解決 1.因為5 9 代表整除取商,即結果為0 而 5.0 9 代表5除以9,即結果為0.555556 所以兩者結果完全不一樣。再比如 3 2 1,而3.0 2 1.5 2.double b 2這是對的,沒有必要寫成double b 2.0,因為系統會自動幫你轉...