SORU
1 Mart 2009, Pazar


C Uygun yığın ve yığın kullanımı ?

Bir süre programlama yaptım ama çoğunlukla Java ve C oldu#. Aslında hiç kendi başıma bellek yönetmek zorunda kaldım. Geçenlerde C programlama başladı ve yığın kaydetmek için zaman yığını ve bir şeyleri saklamak gerekir zaman olarak biraz kafam karıştı.

Benim anlayış çok sık erişilen hangi değişkenler stack ve nadiren kullanılan nesneler, değişkenler üzerinde saklanmalıdır, büyük veri yapıları yığında saklanmalıdır. Bu doğru mu yoksa yanlış mıyım?

CEVAP
1 Mart 2009, Pazar


Hayır, yığın ve yığın arasındaki fark performans değil. Ömrü: bir fonksiyon içinde yerel değişken (malloc olmayan bir şey (veya yeni) yığın üzerinde yaşayan. İşlevinden döndüğünüzde geçer. Eğer bir şey daha ilan etti işlevi daha yaşamak istiyorsanız, öbek üzerinde tahsis gerekir.

class Thingy;

Thingy* foo( ) 
{
  int a; // this int lives on the stack
  Thingy B; // this thingy lives on the stack and will be deleted when we return from foo
  Thingy *pointerToB = &B; // this points to an address on the stack
  Thingy *pointerToC = new Thingy(); // this makes a Thingy on the heap.
                                     // pointerToC contains its address.

  // this is safe: C lives on the heap and outlives foo().
  // Whoever you pass this to must remember to delete it!
  return pointerToC;

  // this is NOT SAFE: B lives on the stack and will be deleted when foo() returns. 
  // whoever uses this returned pointer will probably cause a crash!
  return pointerToB;
}

İçin daha net bir anlayış ne yığın, gel de diğer uç-ziyade anlamaya çalış ne yığın mu açısından bir yüksek seviyeli dil, "çağrı yığını" ve "çağırma" ve bakın ne makinenin ne zaman aradın bir işlev. Bilgisayar belleği sadece adresleri bir dizi; "" ve "yığın" derleyici buluşlar. öbek.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Animation Workshop

    Animation Wo

    8 NİSAN 2010
  • friendz.net

    friendz.net

    29 EKİM 2010
  • MovieZoneET

    MovieZoneET

    22 Aralık 2009