Merhabalar herkese!
Bugün sizlere biraz "new" keyword'ü hakkında konuşacağım. Bu keyword ile (ve bir pointer ile), bir veriyi belleğin heap kısmında tutabilirsiniz.
Bu tekniğe aynı zamanda "dynamic memory allocation" da denir.
Öncelikle heap ve stack hakkında biraz konuşabiliriz.
Stack, İngilizce'de yığın anlamına gelir. Veriler aynı bir dolaptaki kutular gibi üst üste dizilidir. Yüksek adresten düşük adrese veri depolar.
Heap ise, az önce dediğimiz gibi, dinamiktir. Düzensiz bir şekilde veri depolar. Düşük adresten yüksek adrese veri depolar.
Dynamic memory allocation işlemi ise, stack'te pointer oluşturup, oradan heap'e bağlamak ve nesneyi (veya değişkeni) orada oluşturmaktır.
C ve C++'ta normalde yazdığımız değişkenler stack'te, düzenli bir şekilde depolanır. Ve program, işi bitince, bu değişkenleri siler. Ama heap'te kendimiz silmeliyiz. Silmezsek güvenlik açıkları (memory leak) ile uğraşırız.
Hadi, bir örnek kod yazalım!
Bu kodumuzda, pointer yardımı ile heap'te 5 elemanlı bir dizi oluşturduk. Sonra dizi elemanlarına tek tek "for döngüsü" ile eleman atadık.
Kodumuzun sonunda da, güvenlik açıklarına karşın pointer'ımızın gösterdiği dizideki verileri sildik ve pointer'ımızı da "nullptr" yaptık, yani hiç bir şeyi göstermiyor.
Kodu derleyip deneyebilirsiniz.
Bugün sizlere biraz "new" keyword'ü hakkında konuşacağım. Bu keyword ile (ve bir pointer ile), bir veriyi belleğin heap kısmında tutabilirsiniz.
Bu tekniğe aynı zamanda "dynamic memory allocation" da denir.
Öncelikle heap ve stack hakkında biraz konuşabiliriz.
Stack, İngilizce'de yığın anlamına gelir. Veriler aynı bir dolaptaki kutular gibi üst üste dizilidir. Yüksek adresten düşük adrese veri depolar.
Heap ise, az önce dediğimiz gibi, dinamiktir. Düzensiz bir şekilde veri depolar. Düşük adresten yüksek adrese veri depolar.
Dynamic memory allocation işlemi ise, stack'te pointer oluşturup, oradan heap'e bağlamak ve nesneyi (veya değişkeni) orada oluşturmaktır.
C ve C++'ta normalde yazdığımız değişkenler stack'te, düzenli bir şekilde depolanır. Ve program, işi bitince, bu değişkenleri siler. Ama heap'te kendimiz silmeliyiz. Silmezsek güvenlik açıkları (memory leak) ile uğraşırız.
Hadi, bir örnek kod yazalım!
C++:
#include <iostream>
using namespace std;
int main(){
int j = 1;
int *ptr = new int[5]; //5 elemanlı bir dizi
for(int i = 0; i < 5; i++){
j+=2;
ptr[i] = j;
cout<<"Dizinin "<<i<<". elemaninin degeri : "<<ptr[i]<<endl;
}
/*Ve tabii ki de memory leak'i önlemeliyiz.*/
delete[] ptr;
ptr = nullptr;
return 0;
}
Bu kodumuzda, pointer yardımı ile heap'te 5 elemanlı bir dizi oluşturduk. Sonra dizi elemanlarına tek tek "for döngüsü" ile eleman atadık.
Kodumuzun sonunda da, güvenlik açıklarına karşın pointer'ımızın gösterdiği dizideki verileri sildik ve pointer'ımızı da "nullptr" yaptık, yani hiç bir şeyi göstermiyor.
Kodu derleyip deneyebilirsiniz.