BLM-112 PROGRAMLAMA DİLLERİ II. Ders-3 İşaretçiler (Pointer) (Kısım-2)

Benzer belgeler
BLM 112- Programlama Dilleri II. Hafta 5 İşaretçiler (Pointers)

Yrd. Doç. Dr. Caner ÖZCAN

Yrd. Doç. Dr. Caner ÖZCAN

Yrd. Doç. Dr. Caner ÖZCAN

BLM 112- Programlama Dilleri II. Hafta 4 İşaretçiler (Pointers)

Genel Programlama II

Yrd. Doç. Dr. Caner ÖZCAN

BLM-112 PROGRAMLAMA DİLLERİ II. Ders-8 Dosya İşlemleri-1. Yrd. Doç. Dr. Ümit ATİLA

BLM-112 PROGRAMLAMA DİLLERİ II. Ders-1 Kapsama Kuralları & Rasgele Sayı Üretimi & Rekürsif (Özyinelemeli) Fonksiyonlar

BLM 112- Programlama Dilleri II. Hafta 2 C Programlarının Bellek Düzeni ve Rekürsif (Özyinelemeli) Fonksiyonlar

ALGORİTMA VE PROGRAMLAMA II

Genel Programlama II

Yrd. Doç. Dr. Caner ÖZCAN

BLM-111 PROGRAMLAMA DİLLERİ I. Ders-11 Karakter Diziler. Yrd. Doç. Dr. Ümit ATİLA

YZM 2116 Veri Yapıları

Yrd. Doç. Dr. Caner ÖZCAN

Yrd. Doç. Dr. Caner ÖZCAN

BLM-112 PROGRAMLAMA DİLLERİ II. Ders-7 Sıralama Algoritmaları

ELN1001 BİLGİSAYAR PROGRAMLAMA I

Yrd. Doç. Dr. Caner ÖZCAN

BLM-111 PROGRAMLAMA DİLLERİ I. Ders-12 Fonksiyonlar. Yrd. Doç. Dr. Ümit ATİLA

8. İŞARETCİLER (POINTERS)

ÇOK BOYUTLU DİZİLER VE DİNAMİK BELLEK YÖNETİMİ İLE İLGİLİ ÖRNEKLER

Hafta 13 Fonksiyonlar

Konular. Hafta 5 Veri Tipleri (Devam) BLG339 PROGRAMLAMA DİLLERİ KAVRAMI

Yrd. Doç. Dr. Caner ÖZCAN

Pointer Kavramı. Veri Yapıları

ALGORİTMA VE PROGRAMLAMA II

BLM-111 PROGRAMLAMA DİLLERİ I. Ders-2 Değişken Kavramı ve Temel Operatörler

Temel Bilgisayar Programlama

Hafta 7 C Programlama Diline Giriş ve C Derleyicisi

BÖLÜM 9: POINTERLER (İŞARETÇİLER)

ELN1002 BİLGİSAYAR PROGRAMLAMA 2

Malloc () ve Free() fonksiyonları

BLM-111 PROGRAMLAMA DİLLERİ I. Ders-10 Diziler. Yrd. Doç. Dr. Ümit ATİLA

BLM-111 PROGRAMLAMA DİLLERİ I. Ders-8 Değişken Tipleri ve Temel Giriş/Çıkış İşlemleri

Göstericiler (Pointers)

Hafta 12 Karakter Tutan Diziler

Adı Soyadı Öğrenci No. Toplam (100p) 2 (10p) +10p. 5 (25p) +10p. 3 (20p) 4 (25p) 1 (20p)

Pointers (İşaretçiler)

BLM-111 PROGRAMLAMA DİLLERİ I. Ders-4 Döngü Yapıları. Yrd. Doç. Dr. Ümit ATİLA

Struct VE GÖSTERİCİLER FONKSİYONLARDA STRUCT KULLANIMI Programlama dilleri hafta -

BLM111 Programlama Dilleri I. Hafta 10 Diziler. Yrd. Doç. Dr. Caner ÖZCAN

Bölüm 6. Veri Türleri ISBN

Dizgiler. C dilinde karakter m şeklinde tek tırnak içerisinde yazılan ifadelerdir. Bu karakterlerin her biri aslında bir tamsayı ile ifade edilir.

Nesneye Yönelik Programlama (OOP) 7.Hafta

ALGORİTMA VE PROGRAMLAMA II

VERİ YAPILARI DERS NOTLARI BÖLÜM 1 GİRİŞ. Yard. Doç. Dr. Deniz KILINÇ

C++ ile Nesneye Dayalı Programlama

enum bolumler{elektronik, insaat, bilgisayar, makine, gida};

sayi=3 harf=a reelsayi=8.72 Bellek durumu 5. İşaretç iler (pointers)

Doğu Akdeniz Üniversitesi Bilgisayar Mühendisliği Bölümü. BLGM 318 Ara Sınavı Đlkbahar Dönemi 13 Nisan Ad, Soyad Öğrenci No.

YZM 2105 Nesneye Yönelik Programlama

Temel Bilgisayar Programlama Final Sınavı Çalışma Notları

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

Sunum İçeriği. Programlamaya Giriş

Yrd. Doç. Dr. Caner ÖZCAN

Programlama Dilleri. C Dili. Programlama Dilleri-ders08/ 1

PROGRAMLAMAYA GİRİŞ. Öğr. Gör. Ayhan KOÇ. Kaynak: Algoritma Geliştirme ve Programlamaya Giriş, Dr. Fahri VATANSEVER, Seçkin Yay.

ALGORİTMA VE PROGRAMLAMA I

İstanbul Teknik Üniversitesi IEEE Öğrenci Kolu DİZİLER

Yrd. Doç. Dr. Caner ÖZCAN

Algoritma Geliştirme ve Veri Yapıları 7 Liste ve Bağlantılı Liste. Mustafa Kemal Üniversitesi

Mühendislik Fakültesi Elektrik-Elektronik Mühendisliği C Programlama 7. Bölüm Metot Tanımlama ve Kullanma

BLM 112- Programlama Dilleri II. Hafta 1 Giriş, Kapsama Kuralları ve Rasgele Sayı Üretimi

BLM 111 Algoritma ve Programlama I Güz 2018

Programlama Dilleri 1. Ders 5: Göstericiler

YZM 2116 Veri Yapıları

PROGRAMLAMAYA GİRİŞ FONKSİYONLAR

Öğr. Gör. Musa AYDIN Fatih Sultan Mehmet Vakıf Üniversitesi

Dizi nin Önemi. Telefon rehberindeki numaralar, haftanın günleri gibi v.b.

ELN1001 BİLGİSAYAR PROGRAMLAMA I

ALGORİTMA VE PROGRAMLAMA II

ALGORİTMA VE PROGRAMLAMA II

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

Önemli noktalar. Paradigma Nesnelere Giriş Mesajlar / Ara bağlantılar Bilgi Gizleme (Information Hiding ) Sınıflar(Classes) Kalıtım/Inheritance

Algoritma Geliştirme ve Veri Yapıları 8 Kuyruk ve Yığın Yapısı. Mustafa Kemal Üniversitesi

Nesne İşaretçileri. Binnur Kurt Bilgisayar Mühendisliği Bölümü İstanbul Teknik Üniversitesi. Sınıf Yapısı. Kalıtım Çok Şekillilik

Diziler. Yrd.Doç.Dr.Bülent ÇOBANOĞLU

VERİ YAPILARI LİSTELER. Yrd. Doç. Dr. Murat GÖK Bilgisayar Mühendisliği Bölümü YALOVA ÜNİVERSİTESİ

Fonksiyonlar. C++ ve NESNEYE DAYALI PROGRAMLAMA 51. /* Fonksiyon: kup Bir tamsayının küpünü hesaplar */ long int kup(int x) {

Görsel Programlama DERS 01. Görsel Programlama - Ders01/ 1

FONKSİYONLAR. Gerçek hayattaki problemlerin çözümü için geliştirilen programlar çok büyük boyutlardadır.

NESNEYE YÖNELİK PROGRAMLAMA

Hafta 11 Çok Boyutlu Diziler

NESNE TABANLI PROGRAMLAMA Final Sınavı Cevapları

ALGORİTMA VE PROGRAMLAMA II

// hataları işaret eden referans

YAPILAR BİRLİKLER SAYMA SABİTLERİ/KÜMELERİ. 3. Hafta

Örnek1: #include <iostream> #include <string> using namespace std;

Hafta 9 C Dilinde Kontrol ve Döngü Yapıları

Bilgisayar Programlama. 1.Hafta

ZAFİYET TESPİTİ VE SIZMA YÖNTEMLERİ. Eyüp ÇELİK Bilgi Teknolojileri Güvenlik Uzmanı

Bilgisayar Programcılığı. Ögr. Gör. Cansu AYVAZ GÜVEN

3.1 Pointer in Yararları

Öğr. Gör. Serkan AKSU 1

İsimler ve Kapsam. Hafta 4 Ders 2 BLG339 PROGRAMLAMA DİLLERİ KAVRAMI

Hafta 4 Döngü Yapıları

Örnek 4: Örnek Özyinelemeli fonksiyon örneği Bölüm 9. C++ programlama dilinde Nesne ve sınıf

Internet Programming II. Elbistan Meslek Yüksek Okulu Bahar Yarıyılı

Transkript:

BLM-112 PROGRAMLAMA DİLLERİ II Ders-3 İşaretçiler (Pointer) (Kısım-2) Yrd. Doç. Dr. Ümit ATİLA umitatila@karabuk.edu.tr http://web.karabuk.edu.tr/umitatilla/

Dinamik Bellek Yönetimi Bir program çalıştırıldığında işletim sistemi programın çalışması için bir alan ayırır (stack ve heap). Stack, global statik değişkenler, fonksiyonlar ve onların yerel değişkenlerinin tutulduğu yerdir. Heap, program için ayrılan ve çalışma zamanında hafıza alanı açmak için kullanılan boş alandır. 2

Stack ve Heap Stack ve heap hafızanın mantıksal bölümleridir. Stack LIFO (Son giren ilk çıkar) mantığıyla çalışır. Bir kutu gibi düşünülebilir. Kutuya bir şeyler koyarsınız ve son koyduğunuz nesneyi ilk önce alırsınız. Heap ise programcı için bir tarla gibidir ve kullanımı programcının sorumluluğundadır. 3

Stack ve Heap 4

Stack ve Heap Değişkenler, işaretçiler ve kod adresleri stack bölgesinde tutulurken, işaretçiler tarafından gösterilen hafıza alanları ise heap alanında tutulur. Stack heap alanına göre daha hızlıdır. Çünkü stack bölgesinin çalışma mantığı kolaydır. Erişmek istediğimiz alanlar bir biri ardına sıralanmıştır. Heap erişimi ise daha yavaştır. Çünkü heap alanında boş bir bölgeye yerleştirdiğimiz bir nesneye erişmek için heap alanında karmaşık bir arama yapmalıyız. 5

Stack ve Heap 6

Stack ve Heap 7

Dinamik Bellek Yönetimi Şimdiye kadar yazdığımız programlarda örneğin dizi oluştururken dizinin boyutu önceden belliydi. Ancak dizi elemanı sayısı sabit olmayan ve önceden kestiremediğimiz bir durum varsa ve biz ne olur ne olmaz diyerek dizi eleman sayısı olarak büyük bir sayı atarsak bu seferde hafızayı boş yere işgal etmiş olacağız. Çözüm dinamik bellek yönetimi kullanmaktır. Dinamik hafıza yönteminde ihtiyaç duyulan hafıza miktarı programın çalışması esnasında belirlenir. 8

Dinamik Bellek Yönetimi Dinamik bellek yönetimi için calloc(), malloc() ve realloc() olmak üzere üç fonksiyon kullanılır. Her üç fonksiyon da stdlib kütüphanesinde bulunur. Bu yüzden fonksiyonlardan herhangi birini kullanacağınız zaman, programın başına #include<stdlib.h> yazılması gerekir. 9

malloc Malloc fonksiyonu bir değişken için hafızadan bir blok yer ayrılması için kullanılır. Eğer hafızada yeterli alan yoksa fonksiyon NULL döndürür. int *ptr; ptr = (int *) malloc(n*sizeof(int)); 10

calloc Calloc fonksiyonu da hafıza bloğu almak için kullanılabilir. Eğer hafızada yeterli alan yoksa fonksiyon NULL döndürür. Malloc fonksiyonundan farklı olarak ilk değer ataması yapar char *ptr; ptr = (char *)calloc(10, sizeof(char)); 11

realloc Realloc fonksiyonu hafızadan ayrılan bir alanı yeniden boyutlandırmak için kullanılır. Tekrar ayarlanacak hafıza alanının başlangıcını işaret edecek bir pointer ve yeni boyut bilgisini parametre olarak alır. void *realloc(void *ptr, size_t size); Realloc fonksiyonu daha önce tahsis edilen bloğun hemen altında sürekliliği bozmayacak şekilde tahsisat yapar. Eğer daha önce tahsis edilen bloğun altında yeterli alan yoksa bellekte bloğun tamamı için yer arar. Yeterli hafıza alanı bulursa bloğun tamamını hafızada o bölgeye taşır. Eskisini siler. Yeterli alan bulamaz ise NULL döndürür. 12

realloc Eğer realloc fonksiyonu yeterli yer bulamayıp bloğu başka yere taşırsa bu durumda geri dönüş değerini aynı işaretçiye atamak gerekir. Çünkü bu durumda bloğun başlangıç adresi değişmektedir. char *ptr; ptr = (char *)calloc(10, sizeof(char)); ptr = realloc (ptr, 20*sizeof(char)); 13

free Gelişmiş programlama dillerinde ( örneğin, Java, C#, vb... ) kullanılmayan nesnelerin temizlenmesi otomatik olarak çöp toplayıcılarla ( Garbage Collector ) yapılmaktadır. Ne yazık ki C programlama dili için bir çöp toplayıcı yoktur ve iyi programcıyla, kötü programcı burada kendisini belli eder. 14

free Büyük boyutta ve kapsamlı bir program söz konusuysa, efektif bellek yönetiminin ne kadar önemli olduğunu daha iyi anlarsınız. Gereksiz tüketilen bellekten kaçınmak gerekmektedir. alloc ve malloc fonksiyonlarıyla her hafızadan ayrılan alanın tekrar heap alanına serbest bırakılması için free fonksiyonu çağırılır. int *ptr; ptr = (int *) malloc(n*sizeof(int)); free(ptr); 15

Örnek-1 16

Örnek-2 17

Örnek-2 18

Örnek-3 19

Kaynaklar Paul J. Deitel, C How to Program, Harvey Deitel. Kaan Aslan, A dan Z ye C Klavuzu 8. Basım, Pusula Yayıncılık, 2002. 20