Forum: D Programlama Dili RSS
İsaretçiler
DarthRagnos #1
Üye 3 aydır · 4 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Konu adı: İsaretçiler
Merhaba arkadaşlar, D ' de işaretçiler çöp toplayıcı tarafından belleğe geri verilir mi?
kerdemdemir #2
Üye Eyl 2013 tarihinden beri · 123 mesaj · Konum: Danimarka
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
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
acehreli (Moderatör) #3
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4513 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
(Ö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
DarthRagnos #4
Üye 3 aydır · 4 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Cevaplar için teşekkürler
kerdemdemir #5
Üye Eyl 2013 tarihinden beri · 123 mesaj · Konum: Danimarka
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
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
erdem (Moderatör) #6
Üye Tem 2009 tarihinden beri · 959 mesaj · Konum: Eskişehir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
kerdemdemir:
Birde "heap"'in türkçesini biliyormusunuz acaba?

Heap öbek, bellek yığını, alt yığın olarak Türkçeye çevrilmiş.
acehreli (Moderatör) #7
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4513 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
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
Doğrulama Kodu: VeriCode Lütfen resimde gördüğünüz doğrulama kodunu girin:
İfadeler: :-) ;-) :-D :-p :blush: :cool: :rolleyes: :huh: :-/ <_< :-( :'( :#: :scared: 8-( :nuts: :-O
Özel Karakterler:
Bağlı değilsiniz. · Şifremi unuttum · ÜYELİK
This board is powered by the Unclassified NewsBoard software, 20100516-dev, © 2003-10 by Yves Goergen
Şu an: 2017-10-22, 08:24:15 (UTC -07:00)