Thread overview
İsaretçiler
Sep 15, 2017
DarthRagnos
Sep 15, 2017
kerdemdemir
Sep 15, 2017
DarthRagnos
Sep 16, 2017
kerdemdemir
Sep 16, 2017
erdem
September 15, 2017

Merhaba arkadaşlar, D ' de işaretçiler çöp toplayıcı tarafından belleğe geri verilir mi?

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

September 15, 2017

Merhaba,

D dilinde çöp toplayıcı var yani RAM'de oluşturduğumuz objeler dil tarafından otomatik siliniyor.

Çöp toplayıcı özelliği isteğe bağlı olarak devreden çıkartılabiliyor. Bu durumda hafızayı geri verme işleri kullanılıcıya bırakıyor.

Belki "işaretcilerin belleğe geri verilmesi" demek yerine "bellekteki objelerimizin örneklerinin geri verilmesi" demek daha uygun olabilir.

Çünkü örneğin; int *ptr = null; --> Bu işaretçi zaten hiç bir bellek kullanmıyor geri verilen işaretçi gösterdiği hafıza.

Saygılar
Erdemdem

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

September 15, 2017

(Öncelikle, Erdemdem, RAM demek tam doğru değil çünkü başka bir sürü şey gibi işlev çağrı yığıtı (call stack) da RAM'dedir.)

Belki şöyle söylemek daha uygun: D runtime'ın ayırıp kullandırdığı bellek alanları (örneğin diziler, new ile ayrılan nesneler, vs.), işleri bittiğinde çöp toplayıcı tarafından geri alınır.

Belki söylenmek istenen o değildi ama işaretçiler de çöp toplayıcı tarafından geri verilir çünkü hem geri verilen bir nesnenin üyesi olabilirler hem de yaygın olarak gerekmese de, bir işaretçinin alanı bile D runtime'dan (çöp toplayıcıdan) ayrılmış olabilir:

void foo() {
   auto i = 42;    // int
   auto g = &i;    // int göstergesi

   auto gg = new int*;    // int göstergesi için yer
   // türünün int** olduğunu kanıtlayalım:
   static assert(is (typeof(gg) == int**));

   *gg = g;
   assert(**gg == 42);
   ++(**gg);
   assert(i == 43);

   // Sözü edilen bu değil herhalde ama gg'nin yaşamı bu noktada sona erer;
   // gg'nin yeri de çöp toplayıcı tarafından geri alınacaktır.
}

void main() {
   foo();
}

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

September 16, 2017

Cevaplar için teşekkürler

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

September 16, 2017

Ali Abi hafıza yerine heap kullansaydım doğru olurmuydu acaba yani D dilinden bahsederkende "D runtime'ın ayırdığı bellek" yerine "heap" diyebilirmiyim.

Birde "heap"'in türkçesini biliyormusunuz acaba?

Erdemdem

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

September 16, 2017

Alıntı (kerdemdemir):

>

Birde "heap"'in türkçesini biliyormusunuz acaba?

Heap öbek, bellek yığını, alt yığın olarak Türkçeye çevrilmiş.

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

September 16, 2017

D runtime'ın yönettiği belleğe "garbage collection heap" deniyor. Yalnızca "heap" tam doğru olmuyor çünkü D'de de kullanabildiğimiz C'nin malloc'uyla ayrılan belleğe de "heap" deniyor.

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]