ISBN 0-321—49362-1
Bölüm 6
Veri Tipleri
Copyright © 2007 Addison-
Wesley. All rights reserved. 1-2
Bölüm 6 Başlıkları
• Giriş
• İlkel Veri Tipleri
• Karakter String Tipleri
• Kullanıcı Tanımlı Tipler
• Dizi Tipleri
• Birleşmiş Diziler
• Kayıt Tipleri
• Küme Tipleri
• İşaretçi ve Referans Tipleri
Copyright © 2007 Addison-
Wesley. All rights reserved. 1-3
Giriş
• veri tipi,bir veri nesneleri kolleksiyonunu ve bu nesneler üzerinde daha önceden
tanımlanmış olan işlemleri tanımlar.
• Bir tanımlayıcı(descriptor) bir değişkenin özellikleri kolleksiyonudur.
• Bir nesne bir kullanıcı tanımlı tipten bir örneği tanımlar.
• Tüm veri tipleri üzerinde tasarımda
düşünülen temel problem bu veri tipleriyle hangi işlemler nasıl yapılacaktır
Copyright © 2007 Addison-
Wesley. All rights reserved. 1-4
İlkel Veri Tipleri(Primitive Data Types)
• Neredeyse tüm programlama dilleri ilkel veri tiplerini sağlamaktadır.
• İlkel veri tipleri: Diğer veri tipleri yardımıyla tanımlanamayan tiplerdir.
• Bazı veri tipleri donanımın bir yansımasıdır.
• Diğerleri donanım harici desteğe ihtiyaç duyabilir.
Copyright © 2007 Addison-
Wesley. All rights reserved. 1-5
İlkel Veri Tipleri: Tamsayı(Integer)
• Tüm donanımlarda desteklenen bir tiptir ve karşılığı kolaydır.
• Bir dilde 8 farklı tamsayı olabilir.
• Java da işaretli tamsayı boyutları: byte, short, int, long
Copyright © 2007 Addison-
Wesley. All rights reserved. 1-6
İlkel Veri Tipleri:Kayan Noktalı Sayılar( Floating Point)
• Gerçel sayıları yaklaşıklıklar yardımıyla modeller.
• Bilimsel hesaplamalarda kullanılan dillerde en az iki noktalı sayı destekler(örn., float ve double; )
• Donanım desteği bazen tam olarak vardır
• IEEE Floating-Point Standard 754
Copyright © 2007 Addison-
Wesley. All rights reserved. 1-7
İlkel Veri Tipleri: Ondalık(Decimal)
• İş uygulamalarında (Parasal)
– COBOL da önemlidir.
– C# da decimal ver tipi vardır.
• Belirli sabit sayıda ondalık basamak tutar.
• Avantaj: doğruluk(accuracy)
• Dezavantaj: sınırlı aralık, belleği israf eder.
Copyright © 2007 Addison-
Wesley. All rights reserved. 1-8
İlkel Veri Tİpleri: Mantıksal(Boolean)
• Hepsinin en basitidir.
• Değerler: iki eleman, biri doğru“true” ve diğeri yanlış “false”
• Bitler ile gerçeklenebilirler,bununla birlikte genellikle byte lar ile gerçeklenirler.
– Avantaj: okunabilirlik(readability)
Copyright © 2007 Addison-
Wesley. All rights reserved. 1-9
İlkel Veri tipleri: Karakter(Character)
• Sayısal kodlar ile saklanırlar.
• En yaygın kodlama: ASCII
• Alternatif, 16-bit kodlama: Unicode
– Tüm doğal dillerin karakterlerini barındırır.
– Java da orijinalinde kullanılıyor.
– C# ve JavaScript de Unicode u destekliyor.
Copyright © 2007 Addison-
Wesley. All rights reserved. 1-10
Karakter String tipleri
• Değeri karakter dizisidir.
• Tasarım konuları:
– Bir ilkel tip mi olmalıdır yoksa özel bit dizi tipi – Stringlerin boyutları durağan mi yoksa mi?
değişebilir mi olmalıdır.?
Copyright © 2007 Addison-
Wesley. All rights reserved. 1-11
Karakter string tipleri işlemleri
• Tipik işlemler:
– Atama ve kopyalama
– Karşılaştırma(=, >, etc.) – birleştirme
– Alt string e referans – Şablon eşleme
Copyright © 2007 Addison-
Wesley. All rights reserved. 1-12
Belirli dillerde String tipleri
• C and C++
– İlkel değildir
– char dizileri kullanılır ve işlemler için kütüphane fonksiyonları vardır.
• SNOBOL4 (bir string işleme dili)
– İlkel veri tipidir.
– Birçok işlem hazır vardır.
• Java
– String sınıfıyla ilkeldir.
Copyright © 2007 Addison-
Wesley. All rights reserved. 1-13
String uzunluk(Length) Seçenekleri
• Durağan: COBOL, Java’nın String sınıfı
• Sınırlı değişken uzunluk: C and C++
– C-temelli dillerde, stringin sonunu gösteren özel bir karakter vardır bu karakter ile eleman sayısı bilinir.
• Değişkendir(maksimum yoktur.): SNOBOL4, Perl, JavaScript
• Ada tüm 3 tip uzunluğu desteklemektedir.
Copyright © 2007 Addison-
Wesley. All rights reserved. 1-14
String Tip hesaplama(Evaluation)
• Yazılabilirliğe yardım eder
• Uzunluk belirli olabilir gerçekleştirim kolaydır.
• Değişken uzunluk güzeldir fakat pahalı işlemdir.
Copyright © 2007 Addison-
Wesley. All rights reserved. 1-15
String Gerçekleştirimi
• Durağan uzunluk: derleme
• zamanı tanımlama
• Sınırlı dinamik uzunluk: uzunluk için
çalışma zamanında tanımlama gerektirir. (C ve C++ da değil)
• Dinamik uzunluk: çalışma zamanı
tanımlama gerektirir;yer ayırma ve bu yeri boşaltma en büyük engeldir.
Copyright © 2007 Addison-
Wesley. All rights reserved. 1-16
Derleme ve Çalışma zamanı tanımlayıcıları
Derleme zamanı string uzunluk tanımama
Sınırlı dinamik
stringler için çalışma zamanı uzunluk
belirtme
Copyright © 2007 Addison-
Wesley. All rights reserved. 1-17
Kullanıcı tanımlı tipler
• Bu tiplerde mümkün değerler aralığı
kolaylıkla tamsayılarla ilişkilendirilebilir.
• Java daki örnekler
– integer – char
– boolean
Copyright © 2007 Addison-
Wesley. All rights reserved. 1-18
Sayma Tipleri(Enumeration Types)
• Tüm mümkün değerler adlandırılmış sabitlerdir, tanımlamayla yapılırlar.
• C# örneği
enum days {mon, tue, wed, thu, fri, sat, sun};
• Tasarım Konuları
– Tanımlanan sayma tipi başka yerde tekrar tanımlanıp kullanılabilir mi?
– Sayma tipleri (enumeration) değeleri sadece integer mi olacak
–
Copyright © 2007 Addison-
Wesley. All rights reserved. 1-19
Satma tiplerinin Değerlendirilmesi
• Okunabilirliğe yardım eder.örn., rengi sayı olarak kodlamaya gerek yoktur.
• Güvenilirliğe yardım eder. örn., derleyici
şunları kontrol edebilir.
– İşlemleri (renklerin toplanması izin vermez) – Tanımlandığı aralık dığında değerler atanamaz
– Ada, C# ve Java 5.0; C++ dan daha iyi sayma tip idesteği verir.
Copyright © 2007 Addison-
Wesley. All rights reserved. 1-20
Alt aralık(subrange) tipleri
• Sıralı sürekli değer tanımlama
– Örnek: 12..18 ise tamsayı aralığıdır.
• Ada’ nın tasarımı
type Days is (mon, tue, wed, thu, fri, sat, sun);
subtype Weekdays is Days range mon..fri;
subtype Index is Integer range 1..100;
Day1: Days;
Day2: Weekday;
Day2 := Day1;
Copyright © 2007 Addison-
Wesley. All rights reserved. 1-21
Alt aralık değerlendirme
• Okunabilirliğe yardımcıdır
– Okuyanlara sınırları belirttiği için değişkenin sadece o aralıkta değer alacağını göstermiş olabilir.
• Güvenilirlik
– Aralık dışından değer ataması bir hata olur.
Copyright © 2007 Addison-
Wesley. All rights reserved. 1-22
Kullanıcı tanımlı tiplerin gerçekleştirimi
• Sayma tipleri(Enumeration types) tamsayılar olarak gerçekleştirilirler.
• Aralık tipleri derleyici tarafından bazı şartlar eklenerek ebeveyn tip gibi
gerçekleştirilirler.
Copyright © 2007 Addison-
Wesley. All rights reserved. 1-23
Dizi(array) tipleri
• Bir dizi aynı tipli veri elemanlarının bir
kolleksiyonudur. Her eleman ilk elemanın yerine göre bir indis değeri ile belirlenir.
Copyright © 2007 Addison-
Wesley. All rights reserved. 1-24
Dizi tasarım konuları
• Alt indisler için hangi tipler uygundur?
• İndis elemanlarının değerlerinde sınır kontrolü yapılacak mı?
• İndis aralağı ne zaman sınırlandırılacak?
• Yer ayırma işlemi ne zaman yapılacak?
• İndisler için maksimum değer nedir?
• Dizi ilklenebilecek mi?
• Herhangi bir tür parça alma mümkün müdür?
Copyright © 2007 Addison-
Wesley. All rights reserved. 1-25
Dizi indisleme
• İndisler indis elemanları ile dizi elemanlarını birbirlerine eşler.
array_name (index_value_list) → an element
• İndis sözdizimi
– FORTRAN, PL/I, Ada ( ) parantez kullanır – Birçok diğer diller [ ] kullanır
Copyright © 2007 Addison-
Wesley. All rights reserved. 1-26
Dizi indis tipleri
• FORTRAN, C: sadece integer
• Pascal: integer, Boolean, char, enumeration
• Ada: integer veya enumeration (Boolean ve char dahil)
• Java: sadece integer
• C, C++, Perl, ve Fortran aralık kontrolünü belirtmez
• Java, ML, C# aralık kontrolünü belirtir.
Copyright © 2007 Addison-
Wesley. All rights reserved. 1-27
İndis bağlama ve dizi kategorileri
• Durağan : indis ataması durağan ve yer ayırma işlemi (statik) yapılır yani
çalışma zamanından önce
– Avantaj : etkinlik (dinamik yer ayırma işlemi yok)
• Sabit stack-dinamik: indis aralığı statik olarak stackte sınırlandırılır, fakat yer
ayırma işlemi tanımlama zamanında yapılır.
Copyright © 2007 Addison-
Wesley. All rights reserved. 1-28
İndis bağlama ve dizi kategorileri
• Stack-dinamik: indis aralığı ve yer tahsisis çalışma zamanında yapılır
– Avantaj : esneklik( dizinin boyutun kullanılıncaya kada r bilinmek zorunda değildir.)
• Sabit heap-dinamik: sabit stack-dinamik e benzerdir : sağlama işlemi kullanımda
yaopılır ve yer tahsiside heapten olur.
Copyright © 2007 Addison-
Wesley. All rights reserved. 1-29
İndis bağlama ve dizi kategorileri
• Heap-dinamik: indis aralığı ve yer ayırma dinamişk olur ve istenilen zamanda
değiştirilebilir.
– avantaj: esneklik (diziler program çalışması sırasında büyüyebilir veya küçülebilir)
Copyright © 2007 Addison-
Wesley. All rights reserved. 1-30
İndis bağlama ve dizi kategorileri
• C ve C++ dizilerinde static ifadesi varsa statictir.
• C ve C++ dizilerinde static ifadesi yoksa sabit stack-dinamiktir.
• Ada dizileri stack-dinamik olabilir.
• C ve C++ sabit heap-dynamik diziye izin verir.
• C# ArrayList bulunur.Bu sabit heap- dinamik diziye izin verir.
• Perl ve JavaScript heap-dinamik dizilere izin verir.
Copyright © 2007 Addison-
Wesley. All rights reserved. 1-31
Dizi ilkleme
• Bazı diller ilklemeye izin verir.
– C, C++, Java, C#
int list [] = {4, 5, 7, 83}
– C ve C++ da karakter stringleri char name [] = “freddie”;
– C ve C++da string dizileri
char *names [] = {“Bob”, “Jake”, “Joe”];
– Java String nesneleri ilkleme
String[] names = {“Bob”, “Jake”, “Joe”};
Copyright © 2007 Addison-
Wesley. All rights reserved. 1-32
Dizi İşlemleri
• APL vektörler ve matrisler için çok ayrıntılı işlem yeteneğine sahiptir.
• Ada dizi atamaya izin verir ayrıca dizi birleştirmeye de izin verir.
• Fortran elemanlar temelinde işlem yapmaya izin verir.
– Örneği, iki dizi arasındaki + lama işlemi iki dizi elemanlarının karşılıklı eleman çiftlerinin
toplanmasını sağlar
Copyright © 2007 Addison-
Wesley. All rights reserved. 1-33
Dikdörtgen ve Dişli Diziler
• Bir dikdörtgen dizide her satırda aynı sayıda ve her sütunda aynı sayıda eleman vardır.
• Bir dişli dizide satırlardaki ya da sütundaki elemanların sayıları farklı olabilir.
– Bunun mümkün olması için çok boyutlu dizilerin dizlerin dizileri gibi görülmesi gereklidir.
Copyright © 2007 Addison-
Wesley. All rights reserved. 1-34
Dilimler(Slices)
• Bir dilim bir dizinin alt yapısıdır ve referans mekanizmasından başka Bir şey değildir.
• Dilimler dizi işlemlerinin bulunduğu programlama dillerinde işe yarayan yapılardır.
Copyright © 2007 Addison-
Wesley. All rights reserved. 1-35
Dilim Örnekleri
• Fortran 95
Integer, Dimension (10) :: Vector Integer, Dimension (3, 3) :: Mat Integer, Dimension (3, 3) :: Cube Vector (3:6)4 elemanlı dizidir.
Copyright © 2007 Addison-
Wesley. All rights reserved. 1-36
Fortran 95 de dilim örnekleri
Copyright © 2007 Addison-
Wesley. All rights reserved. 1-37
Dizilerin gerçekleştirimi
• Erişim fonksiyonları indis ifadelerini belirli adreslere eşlerler.
• Tek boyutlu diziler için erişim fonksiyonu:
address(list[k]) = address (list[lower_bound]) + ((k-lower_bound) * element_size)
Copyright © 2007 Addison-
Wesley. All rights reserved. 1-38
Çok boyutlu dizilere erişme.
• İki yaygın yol:
– Satır birinci sıralama
– Sütun birinci sıralama (Fortran)
Copyright © 2007 Addison-
Wesley. All rights reserved. 1-39
Çok boyutlu dizilerde bir elemanın yerini tespit etme
•Genel biçim
Location (a[I,j]) = address of a [row_lb,col_lb] + (((I - row_lb) * n) + (j - col_lb)) * element_size
Copyright © 2007 Addison-
Wesley. All rights reserved. 1-40
Derleme Zamanı Tanımlamaları
Single-dimensioned array Multi-dimensional array
Copyright © 2007 Addison-
Wesley. All rights reserved. 1-41
İlişkili Diziler
• Bir birleşmeli dizi verilerin sırasız dizilmiş halidir, indisler ise eleman sayısı kadar
anahtar(key) lar tarafından sağlanır.
– Kullanıcı tanımlı anahtarlar kullanılabilir.
• Tasarım Konuları: Elemanlara başvuru biçimi nasıl olacaktır.
Copyright © 2007 Addison-
Wesley. All rights reserved. 1-42
Perl de ilişkisel diziler.
• Adlar % ile başlar;
%hi_temps = ("Mon" => 77, "Tue" => 79,
“Wed” => 65, …);
• İndisleme parantezler ve anahtarlar ile sağlanır.
$hi_temps{"Wed"} = 83;
– Elemanlar delete ile silinebilir.
delete $hi_temps{"Tue"};
Copyright © 2007 Addison-
Wesley. All rights reserved. 1-43
Kayıt Tipleri
• Bir kayıt(record) heterojen yapıdaki verilerin birleştirilmiş halidir. Her elemanın kendi tipi ve adı vardır.
• Tasarım Kavramları:
– Alanlara erişim sözdizimsel olarak nasıl yapılacak?
Copyright © 2007 Addison-
Wesley. All rights reserved. 1-44
Kayıtların Tanımlanması
• COBOL seviye nıumaralarını(level numbers) yuvalanmış kayıtları göstermek için kullanır, diğerleri öz yinelemeli fonksiyonlar kullanır.
• Kayıt Alan referansları
1. COBOL
field_name OF record_name_1 OF ... OF record_name_n
2. Diğerleri (nokta notasyonu dot notation) record_name_1.record_name_2. ...
record_name_n.field_name
Copyright © 2007 Addison-
Wesley. All rights reserved. 1-45
COBOL da kayıtların tanımlanması
• COBOL
01 EMP-REC.
02 EMP-NAME.
05 FIRST PIC X(20).
05 MID PIC X(10).
05 LAST PIC X(20).
02 HOURLY-RATE PIC 99V99.
Copyright © 2007 Addison-
Wesley. All rights reserved. 1-46
Ada da kayıt tiplerinin gösterimi
type Emp_Rec_Type is record First: String (1..20);
Mid: String (1..10);
Last: String (1..20);
Hourly_Rate: Float;
end record;
Emp_Rec: Emp_Rec_Type;
Copyright © 2007 Addison-
Wesley. All rights reserved. 1-47
Kayıtlara Referanslar
• Birçok dilde nokta notasyonu kullanılır.
Emp_Rec.Name
• Tam nitelendirilmiş kayıtlar tüm kayıt adlarını barındırmalıdır.
Copyright © 2007 Addison-
Wesley. All rights reserved. 1-48
Kayıtlar Üzerindeki İşlemler.
• Tipler özdeşse atama işlemi
• Ada kayıtların karşılaştırılması imkanına sahiptir.
• Ada kayıtları ilklenebilir.
• COBOL MOVE CORRESPONDING
– Kaynak alanının içindeki verinin kayıtın iç alanına kopyalanmasına imkan verir.
Copyright © 2007 Addison-
Wesley. All rights reserved. 1-49
Kayıt tiplerinin gerçekleştirimi
Her kayıt alanı için, kayıtın başlangıcına göre offset adresleri ilişkilendirilir.
Copyright © 2007 Addison-
Wesley. All rights reserved. 1-50
Birleşik Tipler(Unions Types)
• Bir union tipinde çalışma zamanında farklı zamanlarda farklı tiplerdeki verilerin
kullanılmasına izin verir.
• Tasarım Konuları
– Tip kontrolü gerekli olacak mı?
– Union tipler kayıt tiplerinde kullanılacak mıdır?
Copyright © 2007 Addison-
Wesley. All rights reserved. 1-51
Ada Union Tipleri
type Shape is (Circle, Triangle, Rectangle);
type Colors is (Red, Green, Blue);
type Figure (Form: Shape) is record Filled: Boolean;
Color: Colors;
case Form is
when Circle => Diameter: Float;
when Triangle =>
Leftside, Rightside: Integer;
Angle: Float;
when Rectangle => Side1, Side2: Integer;
end case;
end record;
Copyright © 2007 Addison-
Wesley. All rights reserved. 1-52
Ada Union tipi
Copyright © 2007 Addison-
Wesley. All rights reserved. 1-53
Union ların değerlendirilmesi
• Potansiyel olarak güvensiz yapılardır.
– Tip kontrolüne izin vermezler.
• Java and C# union ları desteklemez.
– Artık programlama dillerinde güvenlik önemlidir.
Copyright © 2007 Addison-
Wesley. All rights reserved. 1-54
İşaretçi ve Referans tipleri (Pointer and Reference Types)
• Bir işaretçi tipinde bellek adres değerleri ya da özel bir değer olan nil tutulur.
• Direkt olmayan adresleme imkanı sağlar.
• Dinamik adres yönetimine imkan tanır.
• Bir işaretçi dinamik olarak oluşturulan bellek adresine erişim için kullanılır.
(genellikle bir heap de)
Copyright © 2007 Addison-
Wesley. All rights reserved. 1-55
İşaretçilerin tasarım konuları
• Bir işaretçi değişkeninin etki alanı ve yasam süresi ne kadar olacaktır?
• Bir heap-dinamik değişkenin yaşam süresi ne kadardır?
• İşaretçiler sadece sınırlandıkları tiplerdeki değişkenleri mi göstermelidir?
• İşaretçiler dinamik bellek yönetiminde kullanılabilir mi?
• Dil işaretçi tiplerini, referans tiplerini ya da her ikisinide desteklemelid midir?
Copyright © 2007 Addison-
Wesley. All rights reserved. 1-56
İşaretçi işlemleri
• İki temel işlem : atrama ve geri havale(dereferencing)
• Atama işleminde işaretçi dğeişkeninin faydalı bir adresi göstermesi sağlanır.
• Geri havale ile işaretçinin gösterdiği adresdeki veri değeri alma anlaşılır.
– C++ da bu işlem * ile yapılır j = *ptr
Copyright © 2007 Addison-
Wesley. All rights reserved. 1-57
İşaretçi Atama işlemi
Atama işlemi j = *ptr
Copyright © 2007 Addison-
Wesley. All rights reserved. 1-58
İşaretçiler ile ilgili işlemler
• İşaretçilerin asılı kalması (tehlikeli)
– Bir işaretçinin geri alınan bir adres değerini göstermesi, yani programın kendisine ait olmayan bir adresi göstermesi
• Heap-dinamik bir değişkenin kaybı
– Heap de ayrılan bir değişken artık program tarafından erişilmez olur.
• P1 işaretçisi bir heap değişkenini gösterir
• Daha sonra p1 başka yeni ayrılan bir heap değişkenini gösterir.
Copyright © 2007 Addison-
Wesley. All rights reserved. 1-59
Ada da işaretçiler
• Dinamik nesneler etki alanı sonunda temizlendiği için yani ayrılan yerin geri
alınması otomatik yapıldığı için işaretçiler yanlış adres göstermez.
• Ada tarafından heap-dinamik değişkenini kaybı problemi çözümlenmemiştir.
Copyright © 2007 Addison-
Wesley. All rights reserved. 1-60
C ve C++ da işaretçiler.
• Oldukça esnektir fakat dikkatli kullanılmalıdır.
• İşaretçiler hehangi bir tipi ne zaman
oluşturulduğuna bakmaksızın gösterebilir.
• Dinamik bellek yönetimi ve adreslemede kullanılır.
• Pointer aritmetiği mümkündür.
• void * tipi herhangi bir tipi gösterebilir.
Copyright © 2007 Addison-
Wesley. All rights reserved. 1-61
Pointer Arithmetic in C and C++
float stuff[100];
float *p;
p = stuff;
*(p+5) eşittir stuff[5] ve p[5]
*(p+i) eşittir stuff[i] ve p[i]
Copyright © 2007 Addison-
Wesley. All rights reserved. 1-62
Referans Tipleri
• C++ özel bir işaretçi tipini barındırır. Bu tipe referans tipi (reference type9 denilir. Parametreler için kullanılır.
– pass-by-reference ve pass-by-value nın avantajlarını sağlar.
• Java C++’ın referans değişkenlerini genişletmiştir ve tamamının işaretçiler yerine kullanılmasını sağlamıştır.
– References refer to call instances
• C# hem Java nın referans tipleri hem de C++ ın işaretçileri vardır.
Copyright © 2007 Addison-
Wesley. All rights reserved. 1-63
İşaretçiler
• İşaretçiler ve referans tipleri dinamik veri yapıları için mutlaka gereklidir bu yüzden dilde mutlaka olmalıdır.
Copyright © 2007 Addison-
Wesley. All rights reserved. 1-64
İşaretçilerin temsili
• Büyük bilgisayarlar tek değer kullanır.
• Intel microprocessors, segment ve offset kullanır.
Copyright © 2007 Addison-
Wesley. All rights reserved. 1-65
Heap Yönetimi
• Çok karmaşık bir çalışma zamanı işlemidir.
• Çöpleri temizlemede iki yaklaşım vardır:
– Referans sayma
– Çöp Toplama: değişken uzayında ter kalmayınca temizleme
Copyright © 2007 Addison-
Wesley. All rights reserved. 1-66
Referans Sayma
• Referans Sayma: Her hücre için bu hücreyi gösteren işaretçi sayısını tutan bir sayaç vardır.
– Dezavantaj: yer gerektirir, çalışma zamanı gerektirir, çalışma zamanı gerektirir
Copyright © 2007 Addison-
Wesley. All rights reserved. 1-67
Çöp Toplama(Garbage Collection)
• Çalışma zamanında hücrelerden yer ayrılı ve gerekli olduğunda bunları gösteren işaretçiler koparılır, böylece çöp toplama başlar.
– Her heap hücresinde çöp toplama için fazladan bit vardır.
– Tüm hücreler başta çöptedir.
– Heap deki tüm işaretçiler izlenir ve işaretçilerin gösterdikleri çöp değil şeklinde işaretlenir.
– Tüm çöp hücreler kullanılabilir hücreler listesine eklenir.
– Dezavantajı: Çok ihtiyaç olursa kötü çalışır yani çok zaman harcanır.
Copyright © 2007 Addison-
Wesley. All rights reserved. 1-68
İşaretleme Algoritması(Marking Algorithm)