Veri Yapıları #01 | Veri Tipleri ve Bellek: 6 Bayt Bekledik, sizeof 12 Dedi
Veri TipleriEğitmen: Dr. Süleyman Burak ÇELİK
Veri Yapıları dersinin ilk videosu. Bir öğrenci kaydında bir char, bir int ve bir char var: 1 + 4 + 1 = 6 bayt etmeli. sizeof ise 12 diyor. Fazladan 6 bayt nereden geldi? Bu soruyla veri tiplerinin bellekte nasıl durduğuna bakıyoruz. Önce bir veri tipinin üç şeyi belirlediğini görüyoruz: alabileceği değerleri, izin verdiği işlemleri ve bellekte kapladığı yeri. İşlemler de tipin parçası: int ile kalan işlemi yapılır, double ile denediğimizde gcc derlemeyi durduruyor. Bu Mac'teki temel tiplerin boyutlarını sizeof ile ölçüyor, 32 bitlik bir int'in neden en fazla 2 147 483 647 tutabildiğini açıklıyoruz. Sonra hata ayıklayıcı lldb ile kaydın 12 baytını tek tek okuyoruz: 123'ün en düşük baytı önce yazılmış (little-endian), alanların arasında ve sonunda 3'er dolgu baytı var. Bunun nedeni hizalama: 4 baytlık bir int, adresi 4'ün katı olan bir yerde durur; offsetof ile alanların yerini (0, 4, 8) gösteriyor, alanların sırasını değiştirerek aynı kaydı 8 bayta indiriyoruz. Dizinin elemanlarının bellekte yan yana durduğunu iki çalıştırmayla görüyoruz: adresler değişse de aradaki farklar 0, 4, 8, 12 ve 16; bu yüzden indeksle erişim tek adım, araya eklemek ise pahalı. Son olarak işaretçiyi tanıyoruz: değeri bir adres olan, bu Mac'te 8 baytlık bir tip; ona 1 eklemek gösterdiği tipin boyu kadar ilerletiyor. Bağlı listelerde düğümleri birbirine bu adreslerle bağlayacağız. Ekrandaki her çıktı, kodun gerçekten derlenip çalıştırılmasından geliyor. Bu derste: 1. Veri tipi: değerler, işlemler ve bellekteki boyut 2. sizeof ile temel tiplerin boyutları; int'in sınırı 3. lldb ile bir kaydın baytları: little-endian ve dolgu baytları 4. Hizalama ve offsetof: aynı kayıt 12 değil 8 bayt 5. Dizide yan yana elemanlar ve işaretçinin aritmetiği Bölümler: 0:00 Veri yapıları: verinin bellekteki düzeni 0:29 Bir kayıt kaç bayt? 0:58 Veri tipi: değerler, işlemler, boyut 1:55 Kaydın 12 baytı 2:34 Hizalama ve dolgu baytları 3:17 Dizi: elemanlar yan yana 4:04 İşaretçi: adres de bir değer 4:40 Bugünün dört kuralı 5:07 Sonraki ders: soyut veri tipleri Kaynak kitap: Mark Allen Weiss — Data Structures and Algorithm Analysis in C++, 4. baskı (2014), §1.1 ve §1.5. Konu sırası ve kavramlar kaynak kitaptan izlenir; programlar C ile özgün yazıldı, anlatım ve ekranlar özgündür. Hedef kitle: veri yapılarına başlayan mühendislik ve bilgisayar/yazılım öğrencileri. Ön koşul: temel C (değişkenler, döngüler, fonksiyonlar).