BG MVC Model View Controller eğitim serisi yayında...

Ana sayfa > Programlama > C Programlama > C örnek kodlar > c_ornek00048

C örnek kodlar

register ve volatile değişken tanımlayıcısı ile bildirimi yapılan değişkenlerle işlem süresi karşılaştırma

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