Program, bir döngü ile yapılan bir işlemi önce register değişken tanımlayıcısı sonra volatile değişken tanımlayıcısı ile tanımlanmış int değişkenlerle gerçekleştirir. register değişkenlerle yapılan işlemler volatile değişkenlerle yapılan işleme göre yaklaşık dört kat daha hızlıdır.
Normal koşullarda bir değişken herhangi bir değişken tanımlayıcısı ile tanımlanmasa bile, derleyici eğer iyileştirme yapma gereği duyarsa, bu değişkeni CPU yazmacına kaydederek kullanır. Bir değişkeni volatile olarak tanımladığımızda, derleyicisinin iyileştirme işlemi yapmasını istemediğimizi, register olarak tanımladığımızda ise, derleyicisinin iyileştirme işlemi yapmasını özellikle istediğimizi ve değişkeni CPU yazmacına kaydetmesini belirtmiş oluruz.
#include <stdio.h>
#include <time.h>
int main(void)
{
clock_t start_t, end_t;
register unsigned long int ruli1, ruli2;
volatile unsigned long int vulid1, vulid2;
start_t = clock();
for(ruli1=0; ruli1<2000000; ruli1++){
for (ruli2=0; ruli2<100; ruli2++) { }
}
end_t = clock();
printf("register değişkenler start_t değeri: %lu\n", start_t);
printf("register değişkenler end_t değeri: %lu\n", end_t);
printf("register değişkenler döngü çalışma süresi (saniye): %.3f\n\n", (double)(end_t - start_t) / CLOCKS_PER_SEC);
start_t = clock();
for(vulid1=0; vulid1<2000000; vulid1++){
for (vulid2=0; vulid2<100; vulid2++) { }
}
end_t = clock();
printf("volatile değişkenler start_t değeri: %lu\n", start_t);
printf("volatile değişkenler end_t değeri: %lu\n", end_t);
printf("volatile değişkenler döngü çalışma süresi (saniye): %.3f\n\n", (double)(end_t - start_t) / CLOCKS_PER_SEC);
return 0;
}
Yukarıdaki programı derleyip çalıştırdığımızda, aşağıdaki ifadeleri ekrana yazar:
register değişkenler start_t değeri: 0 register değişkenler end_t değeri: 132 register değişkenler döngü çalışma süresi (saniye): 0.132 volatile değişkenler start_t değeri: 132 volatile değişkenler end_t değeri: 644 volatile değişkenler döngü çalışma süresi (saniye): 0.512