08.11.2014 Views

c_kitap

c_kitap

c_kitap

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

C ve Sistem Programcıları Derneği - C Ders Notları - Necati Ergin<br />

auto yer belirleyicisi global değişkenlerle ya da parametre değişkenleriyle birlikte<br />

kullanılmaz. Örneğin :<br />

auto int a; /* Geçersiz! */<br />

function(auto int x) /* Geçersiz! */<br />

{<br />

/***/<br />

}<br />

auto anahtar sözcüğü bazı mikroişlemcilerde uyumu korumak için düşünülmüştür.<br />

Modern sistemlerde anlamlı bir kullanımı yoktur.<br />

register Belirleyicisi<br />

register belirleyicisi, değişkenin "bellekte değil de CPU yazmaçlarının içinde" tutulması<br />

isteğini derleyiciye ileten bir anahtar sözcüktür. Değişkenlerin bellek yerine doğrudan<br />

yazmaçlarda tutulması programın çalışmasını hızlandırır.<br />

Yazmaç (register) nedir? Yazmaçlar CPU (central processing unit) içinde bulunan tampon<br />

bellek bölgeleridir. CPU içindeki aritmetik ve mantıksal işlemleri yapan birimin yazmaçlar<br />

ve belleklerle ilişkisi vardır. Genel olarak CPU tarafından yapılan aritmetik ve mantıksal<br />

işlemlerin her iki terimi de belleğe ilişkin olamaz. Örneğin bellekte bulunan sayi1 ve sayi2<br />

isimli iki değişken toplanarak elde edilen değer sayi3 isimli başka bir bellek bölgesine<br />

yazılmak istensin. Bu C'deki<br />

sayi3 = sayi1 + sayi2;<br />

işlemine karşılık gelir. CPU bu işlemi ancak 3 adımda gerçekleştirebilir:<br />

1. adım : Önce sayi1 bellekten CPU yazmaçlarından birine çekilir.<br />

MOV reg, sayi1<br />

2. adım : Yazmaç ile sayi2 toplanır.<br />

ADD reg, sayi2<br />

3. adım: Toplam sayi3 ile belirtilen bellek alanına yazılır.<br />

MOV sayi3, reg<br />

Belleğe yazma ve bellekten okuma işlemleri yazmaçlara yazma ve yazmaçlardan okuma<br />

işlemlerine göre daha yavaştır. Çünkü belleğe erişim için bir makine zamanı gerekir.<br />

register belirleyicisi derleyiciye yalnızca bir isteği iletir. Yani register belirleyicisi ile<br />

bildirilen değişkenin yazmaçta tutulacağının bir güvencesi yoktur. Derleyiciler böyle bir<br />

isteği yerine getirmeyebilir. CPU yazmaçları hangi sistem söz konusu olursa olsun sınırlı<br />

sayıdadır. Bu nedenle birkaç değişkenden fazlası register belirleyicisi ile tanımlanmış olsa<br />

bile yazmaçlarda saklanmayabilir. C derleyicileri yazmaçlarda saklayamayacakları<br />

değişkenler için genel olarak hata veya uyarı iletileri vermez. Yani derleyiciler,<br />

tutabilecekleri yazmaç sayısından fazla register belirleyicisine sahip değişkenlerle<br />

karşılaştıklarında bunlara ilişkin register belirleyicilerini dikkate almaz.<br />

register belirleyicileri ancak yerel ya da parametre değişkenleri ile kullanılabilir. Global<br />

değişkenler ile kullanılamazlar. Örnekler:<br />

register int g; /* Geçersiz! */<br />

int func (register int y) /* Geçerli */<br />

{<br />

register int x; /* Geçerli */<br />

}<br />

342

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!