在Turbo C下有種變量叫寄存器變量。使用寄存器的好處是可以提高程序的運行速度!因為減少了尋址時間。 看下面的C代碼: main() { int i,k; register j; for(i=1;i<=100;i++); for(k=1;k<=100;k++); for(j=1;j<=100;j++); } 這里j被聲明為寄存器變量。通過tcc -S后看它的部分匯編代碼。 ====================================================================================== …… …… mov di,1 jmp short @5 @4: @3: inc di @5: cmp di,100 jle @4 @2: ; ?debug L 6 mov word ptr [bp-2],1 jmp short @9 @8: @7: inc word ptr [bp-2] @9: cmp word ptr [bp-2],100 jle @8 @6: ; ?debug L 7 mov si,1 jmp short @13 @12: @11: inc si @13: cmp si,100 jle @12 …… …… ====================================================================================== 看到了!里面有di和si兩個寄存器。但是只有j被聲明為寄存器變量,為什么會出現兩個呢?這個我沒有找到什么合理的解釋,也可能是由于程序中的變量少(少的范圍是1-3個,如果使用兩個變量,一個為普通變量,一個為寄存器變量,在匯編的代碼下兩個變量均是使用寄存器)。 在Turbo C中寄存器變量的個數最多只能使用兩個(因為寄存器這個資源是很寶貴的)。但是如果聲明多個寄存器變量的話,在編譯時并不會報錯,但這并不表示可以定義多個寄存器變量。同樣,用tcc -S生成匯編代碼后可以看到最多也就使用了di和si兩個寄存器。 在一個程序中寄存器變量只能聲明兩個,肯定對于我們來說是少了點,但是我們也要合理的運用它。如果把它用在程序中規模比較大的循環中,效果也是可佳的(人能感覺到的話,可能不現實吧?我沒有用過太大規模的循環)。總之,為了自己程序的速度,合理的利用這兩個寶貴的寄存器變量吧!
|