c語言的for迴圈中執行一次需多少機器週期

2021-07-23 05:22:55 字數 1631 閱讀 9235

1樓:萬能導師

機器迴圈,當然只是在微控制器中,不同的微控制器使用不同的編譯軟體,最終都轉換成彙編,把機器**燒錄成微控制器。

不同的編譯軟體可以用不同的方式編譯語句。以keil為例。(我= 0;我< 1;n + +我+ +);(i, n是char或unsigned char)

賦值語句(i=0)有兩個機械迴圈,

一個判斷語句(i <1) 4個機械迴圈,

一個自加語句(n++) 1機械迴圈,

另一個自我遞增語句(i++)1機械迴圈,

另一個判斷語句(i <1) 4個機械迴圈,結束。

擴充套件資料:

指令週期:

每次cpu獲取一條指令並執行它,它就完成一系列操作,通常稱為指令週期。換句話說,指令週期就是獲取一條指令並執行它所花費的時間。由於每條指令的操作功能不同,每條指令的指令週期也不同。

例如加法指令的指令週期與乘法指令的指令週期是不同的。指令週期通常以cpu週期的數量表示,也稱為機器週期。所需的機器週期數隨指令的不同而變化。對於一些簡單的單位元組指令。

在指令取出週期中,將指令取出到指令暫存器後,立即對其進行解碼並執行,不需要其他機器週期。對於更復雜的指令,例如轉換和乘法指令,需要兩個或更多的機器週期。

具有一個機器週期的指令通常稱為單週期指令,具有兩個機器週期的指令稱為雙週期指令。

2樓:小雨手機使用者

機器週期當然是在微控制器上才有的說法,不同的微控制器採用不同的編譯軟體,最終都是轉成彙編、機器碼燒錄進微控制器。

不同的編譯軟體,對 for 語句的編譯也不盡相同,以keil 為例,對 for(i=0;i<1;i++) n++;(i,n 均為 char 型或 unsigned char 型)進行編譯,得:

①一條賦值語句(i=0) 2個機械週期,

②一條判斷語句(i<1) 4個機械週期,

③一條自增語句(n++) 1個機械週期,

④又一條自增語句(i++) 1個機械週期,⑤又一條判斷語句(i<1) 4個機械週期,結束。

3樓:匿名使用者

for(i = 0; i < 100; i++);

這條語句被優化掉了,

你可以將i的宣告新增volatile以阻止編譯器對其進行優化然後在用3樓 giftbowen 的方法試之

4樓:

利用clock()函式

clock_t start=clock();

for(i=0;i<100;i++);

clock_t end=clock();

這裡clock_t 是clock()函式返回型別的別名,意味著可以講變數宣告為clock_t型別,接受clock()函式返回值

clock()函式返回程式開始執行後的系統時間end-start的值就是100次for迴圈所用的系統時間不過我試了一下,好像,就算讓for迴圈不執行空語句,100次for迴圈所用的系統時間也是0.0

系統時間的單位是ms可能跟機器週期單位是μs差很多吧

5樓:匿名使用者

clock函式,計算用到的時鐘數。

6樓:世鑲柳

執行時間可能是零!

這和編譯器有關(如優化級別),還和cpu有關(如流水線不一樣)。

c語言迴圈中變數的輸入問題,C語言迴圈中變數的輸入問題

include main printf no return 0 c語言中for迴圈中的變數如何按條件儲存,便於接下來使用?可以抄用兩 個一維陣列 也可以襲建一個二維陣列bai儲存下du標,如int r 10 2 再加一個int n 儲存存zhi入r 中的點dao的個數int i,j,a 10 10 ...

c語言巢狀迴圈中的continue語句

continue語句 表示終止本次 本輪 迴圈。當 執行到continue 時,本輪迴圈終止,進入下一輪迴圈。比如下面的 include int main return 0 當i j的和是偶數時,輸出i j i j的值,當不是偶數時則終止本次迴圈,終止本次迴圈,執行下一輪的條件判斷,它只侷限於con...

在C中寫了for迴圈一次都沒有執行就說我下標越界

double.parse strx i strx i 這個集合是你泛型list沒有什麼資料.所有一執行就會報你下標越界,同時double.parse裡面方法引數都是string引數也會報錯,且 sunx i 值 沒有任何效果跟sunx i i 一樣效果,因為sunx裡面座標會變,永遠都是i或者當設定...