April 28, 2014

Şuradaki yöntemler D'de de geçerli (Çok eski bir makale olduğundan kodları yeni derleyicilerde derlenmiyor olabilir; denemedim.):

http://ddili.org/makale/bellek.html

Bir de, çöp toplayıcının taramasını istemediğimiz belleği GC.BlkAttr.NO_SCAN ile ayırabiliyoruz:

http://ddili.org/ders/d/bellek_yonetimi.html

Hatta teoride yepyeni bir çöp toplayıcı yazıp D çalışma ortamına bile bağlayabiliyoruz ama hiç bunu yapan duymadım.

Ali

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

April 29, 2014

Alıntı (zekeriyadurmus):

>

String gibi ubyte[] gibi dizilerin (dilim demek biraz tuhaf geliyor)

Duruma göre ben ikisini de söyleyebiliyorum. D'de dilimin farkını öne çıkartmak için özellikle bastırıyorum. :)

Alıntı:

>

hangi adrese kurulacağını seçemiyoruz değil mi?

Bunun için C'nin stdlib'inden yararlanılır:

import std.c.stdlib;

void main()
{
   int * p = cast(int*)malloc(42 * int.sizeof);
   scope(exit) free(p);

   // Artık elimde 42 elemanlı bir C dizisi var. (Bu diziler ne yazık ki
   // kendi uzunluklarını bilemez.)
   foreach (i; 0 .. 42) {
       p[i] = i;
   }

   // D'nin güzel bir olanağı, p gibi çiğ dizilerden bile dilim
   // oluşturabilmesidir:
   auto d = p[0..42];

   // Türü, int dilimi
   static assert(is (typeof(d) == int[]));

   // Bu dilim p'deki elemanları gösterir:
   assert(d.ptr == p);

   // Tabii, dilime eleman ekleyince p'yi terkedeceğine dikkat etmek gerek:
   foreach (i; 0 .. 100) {
       d ~= i;
   }
   assert(d.ptr != p);  // yeni elemanlar sığsın diye d'ye yeni yer ayrılmıştır
}

Ali

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

1 2
Next ›   Last »