Dinamik Bellek Erişimi Flashcards

1
Q

Nedir

A

include<cstdlib> kütüphanesinde;</cstdlib>

Bir tanım yaptıkan sonra program boyunca bize bir yer ayrılıyor ve program boyunca bu yer kalıyor ve bize bu yeri silmiyor. Bunu compiler yapıyor(yer ayırma işlemi)

Ancak biz bunu runtime da kendimiz yapmak istersek çeşitli standart fonksiyonlarımız var

malloc
calloc
realloc
free

fonksiyonlAI İLE hafıza bloğunda runtimeda spesifik yer ayırabiliriz.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Fonksiyonlar

A

malloc
calloc ve realloc ile hafızayda yer ayırdıysak

free fonksiyonu ile geri verebiliriz.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Hafıza blokları

A
                • // Kullanılmayan yerler
                  ** ** // Runtime da heap alanı(dinamik olarak kullanılabilen alanlar) derlenen kodlar buraya
                • // malloc ile bu bölgeye ulaşabilirim
                  ** **

malloc-> türden bağımsız (void*)
malloc -> açılan hafıza bloğunun ilk adres değerini verir

void* malloc(size_t nBytes) -> bunun içine kaç bytelık yer ayırayım. Start adresi burda alıyoruz.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

)Örnek

A

include<cstdio></cstdio>

#include<cstdlib>
//kütüphaneleri eklendi</cstdlib>

int main

int n

int*pd

printf(“How many elements required”)

scanf(%d,&n)
// int dizi türünden bir dizi tutucam. intpd ile starting adresi alıcam.
-ona göre 10 değişken girersem 40 bytelık alan atayacak (10
4).
-ya da 2 değişken girersem 20 byte yer atayacak.

pd = malloc(sizeof(int)n)
AMA malloc void
türü döndürür. Bizim pd ise int *. o yüzden cast yapmamız gerek.

Güncellenmiş hali;
pd = (int)malloc(sizeof(int)n)

if (pd== NULL){
printf (“ cannot allocate memory”)
exit(EXIT_FAILURE);
}
for(int i= 0 ; i<n; i++) {
pd[i] = i ; ya da *(pd + i) = i;

} // Bu örnekte kendiize spesifik olarak yer atayabildik

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Örnek 2 (ayırdığıımız yeri silmek) FREE foksiyonu olarak (delete)

A

Dinamik bellekte ayrılmış olan yeri hafızaya geri verir.
compiler ile atanan değerleri hafızaya geri veremeyiz o yüzden dinamik olarak yer atıyoruz.

int main

int n

int*pd

printf(“How many elements required”)

scanf(%d,&n)

pd = (int)malloc(sizeof(int)n)

for(int i =0; i<n;i++){
(pd +i) = ii;
}
for(int i =0; i<n;i++){
printf(“pd[%d] : %d\n”), i , *(pd +i));
}
free(pd); // bu alanlar boşaltıldı

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Örnek 3

A

Kütüphaneleri ekledikten sonra

int main

How well did you know this?
1
Not at all
2
3
4
5
Perfectly