Nesneye yönelik programlama için dinamik bellek tahsis/iade davranışı incelemesi
A study of dynamic memory allocation/deallocation behavior for object oriented programming
Yazar: SENAİ KALAFAT
Danışman: PROF. DR. AHMET SERTBAŞ
İstanbul Üniversitesi / Fen Bilimleri Enstitüsü / Bilgisayar Mühendisliği Ana Bilim Dalı
Derece: Yüksek Lisans, 2010
Konu: Bilgisayar Mühendisliği Bilimleri-Bilgisayar ve Kontrol = Computer Engineering and Computer Science and Control
Dizin: Bellek türleri = Memory types ; Nesne = Object ; Nesneye dayalı programlama = Object oriented programming ; Tahsis = Allocation ; Tahsisat kuralları = Allocation rules ; İade = Restitution

Özet:
Bir bilgisayar uygulamasında iki temel bellek alanı bulunmaktadır. Bunlardan biri kullanıcı kontrolü olmaksızın yönetilen durağan bellek iken diğeri kullanıcıya esnek bir yapı sunan dinamik bellektir. Fakat kısıtlı bir kaynak olan bu dinamik bellek alanının verimli ve etkin bir biçimde kullanılması için yönetilmesi ve organize edilmesi gerekmektedir. Bu kısıtlı bellek kaynağının çeşitli yöntemler kullanılarak en iyi şekilde kullanılmasını amaçlayan mekanizmaya dinamik bellek yönetimi denilmektedir. Dinamik bellek alanının yönetilmesi oldukça zor ve karmaşıktır. Bu sebeple dinamik bellek yönetimini en iyi şekilde gerçeklemek için birçok yöntem geliştirilmiştir. Kısıtlı bir kaynağın en verimli şekilde kullanımını amaçlayan bu yöntemler zaman içinde programlama dillerindeki değişiklikler sebebiyle değişime uğramıştır.Benjamin Zorn ve Dirk Grunwald (1992) tarafından C programla dili üzerinde yapılan çalışmalar göstermiştir ki bir uygulamanın toplam tükettiği çalışma süresinin %30'u bellek yönetimine gitmektedir. Berger ve McKinley (2001) tarafından nesne yönelimli bir dil olan C++ üzerinde yapılan çalışma ise bu oranın %60 değerine kadar çıkabildiğini göstermiştir. Haggander ve Lundberg (1998) tarafından yapılan bir başka araştırma nesne yönelim bir dil olan C++ dilinin nesne yönelimli olmayan C diline oranla 20 kat daha fazla bellek kullanabildiğini göstermiştir. Tüm bu sonuçlar dikkate alındığın da nesne yönelimli dillerin etkinliği zaman içerisinde hızla artarak dinamik bellek yönetimi konusunun daha ehemmiyetli bir hale gelmesine sebep olmuştur. Nesne yönelimli olmayan C ve benzeri diller için geliştirilmiş bir çok yöntem genel manada nesne yönelimli dillerde de kullanılabilmesine rağmen en iyi performansı vermedikleri görülmüştür.Nesne yönelimli dillerin temelinde yer alan nesneler ufak boyutlu değişkenleri içinde barındırarak daha büyük yapı taşları oluşturmuşlardır. Nesneler arasındaki ilişkiler, nesnelerin ömrü, nesnelerin boyutları ve bunun gibi özellikler dikkate alındığında nesneler için daha hızlı ve verimli tahsisatçıların geliştirilebileceği görülmüştür.Bu çalışmada genel bir işletim sistemi tahsisatçısı ile belirli bir uygulamada kullanılmak üzere geliştirilmiş hibrit bir tahsisatçı arasında nesneye yönelik bir dil olan C++ üzerinde karşılaştırmalar yapılmıştır. Tahsisatçılar, bir uygulamanın maruz kalacağı tahsis ve iade talepleri doğrultusunda nesne boyut kriteri de göz önüne alınarak test ve analiz edilmiştir. Bu testler sonucunda geliştirilen tahsisatçının işletim sisteminin standart tahsisatçısına oranla daha yüksek bir performans gösterdiği görülmüştür. Bu veriler doğrultusunda nesne yönelimli dillerde nesne temelli geliştirilen tahsisatçıların daha başarılı performans gösterebileği görülmüştür.

Abstract:
In a computer application there are two basic memory regions. One of them is static memory, and the other one is dynamic memory which offers great flexibility to the user. However, to use limited dynamic memory resource in an efficient way, it should be managed and organized. The mechanism that targets to use limited dynamic memory resource in a better way by various methods is called dynamic memory management. Management of dynamic memory is pretty hard and complicated. That's why lots of methods are proposed to improve dynamic memory management. By the changes in programming languages, the methods that aim to use this limited resource in a better way are evolved in time.The studies on the C programming language that Benjamin Zorn and Dirk Grunwald made shows that an application spends %30 of the total running time to the memory management. The studies on the C++, which is an object oriented programming language, that Berger and McKinley (2001) made shows that this ratio can climb up to the %60. Additionally, Hagander and Lundber (1998) shows that C++ object oriented programming language can use 20 times more memory than the C programming language which is not an object oriented programming language. Considering the above labors, since the usage of object oriented programming languages are rapidly increasing, the dynamic memory management issue became more important. The methods that target C and similar programming languages which are not object oriented can be used in object oriented programming languages but they do not perform well.The objects which are the basis of object oriented programming languages became big structures by containing the small size variables. When the relations between objects, life of the objects, size of the objects and similar properties are considered, it show that faster and efficient memory allocators can be developed.In this work, comparisons between the operating system allocator and a hybrid allocator which will be used for a specific application are made on the C++ object oriented programming language. Allocators are tested and analyzed while considering the size of the objects, according to the applications memory allocation and deallocation demands. These tests show that proposed allocator has better performance when compared to operating system allocator. In accordance to these results, the object oriented allocators have higher performance on the object oriented programming languages.