• Sonuç bulunamadı

Bölüm 6. Veri Tipleri ISBN

N/A
N/A
Protected

Academic year: 2022

Share "Bölüm 6. Veri Tipleri ISBN"

Copied!
68
0
0

Yükleniyor.... (view fulltext now)

Tam metin

(1)

ISBN 0-321—49362-1

Bölüm 6

Veri Tipleri

(2)

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

(3)

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

(4)

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.

(5)

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

(6)

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

(7)

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.

(8)

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)

(9)

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.

(10)

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.?

(11)

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

(12)

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.

(13)

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.

(14)

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.

(15)

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.

(16)

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

(17)

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

(18)

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

(19)

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.

(20)

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;

(21)

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.

(22)

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.

(23)

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.

(24)

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?

(25)

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

(26)

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.

(27)

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.

(28)

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.

(29)

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)

(30)

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.

(31)

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”};

(32)

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

(33)

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.

(34)

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.

(35)

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.

(36)

Copyright © 2007 Addison-

Wesley. All rights reserved. 1-36

Fortran 95 de dilim örnekleri

(37)

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)

(38)

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)

(39)

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

(40)

Copyright © 2007 Addison-

Wesley. All rights reserved. 1-40

Derleme Zamanı Tanımlamaları

Single-dimensioned array Multi-dimensional array

(41)

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.

(42)

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"};

(43)

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?

(44)

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

(45)

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.

(46)

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;

(47)

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.

(48)

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.

(49)

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.

(50)

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?

(51)

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;

(52)

Copyright © 2007 Addison-

Wesley. All rights reserved. 1-52

Ada Union tipi

(53)

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.

(54)

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)

(55)

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?

(56)

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

(57)

Copyright © 2007 Addison-

Wesley. All rights reserved. 1-57

İşaretçi Atama işlemi

Atama işlemi j = *ptr

(58)

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.

(59)

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.

(60)

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.

(61)

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]

(62)

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.

(63)

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.

(64)

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.

(65)

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

(66)

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

(67)

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.

(68)

Copyright © 2007 Addison-

Wesley. All rights reserved. 1-68

İşaretleme Algoritması(Marking Algorithm)

Referanslar

Benzer Belgeler

İşlem ölçeğiyle orantılı olmayan ölçüm ölçekleri için örneklemenin etkisi: (a) süreç ölçeğinden daha büyük aralıklar verilerde örtüşmeye neden

 Ondalık sayıların hem tamsayı bölümlerini hem ondalık bölümlerini tam olarak saklayan veri tipleridir..  Smallmoney, -214.768,3648 ile 214.748,3647 arasındaki

• Basit veri tipleri: sayısal, karakter, Boolean. • Kullanıcı-tanımlı sıralama ve

– Verinin bellekte en etkin nasıl depolanacağı, erişileceği ve yönetileceği konularını inceler. – Hangi veri yapısının kullanılacağı, bir algoritmanın

Bu kural çıraklık ücreti için de geçerlidir, işsiz olan kişi için daha elverişli ise aynı şekilde çocuk bakım parası veya ölümcül hastaların refakati süresince

Appletviewer veya html programları kullanarak: Java applet program kodu hazırlanarak html olarak kaydedilir, komut satırından “appletviewer program adı.html” komutu ile

Aşağıdaki cümleleri olumsuz cümle olarak yeniden yazın.. Özge

Java dilinde String veri tipini sayısal veri tiplerinden herhangi birine ( Byte, Double, Float, Integer, Long, Short) dönüştürmek için parse deyimi kullanılır..