2016-04-12 32 views
-1

(Lütfen unvanı yanlış bulduysam, lütfen bana bağlandığına inanıyorum ama bir şey varsa bana haber ver ve ben başlığını/soruyu düzenleyeyim)Çalışma zamanı/derleme zamanı ve yığın/yığın hakkında açıklama

Programlamada verileri bağlamanın farklı yollarını (belirli bir dil) öğrenerek 5'den fazla türe gittik. (Bu sorularım olacak altında ben, sınıfta verilen tanımıyla, türü verdi)

1) Statik: alt simge aralıkları statik bağlı ve depolama tahsisi statik olan (daha önce çalışma zamanı)

  • Başlamak için, çalışma zamanından önce gerçekleştiği anlamına gelen "depolama ayırma statik" ile ne söylediğini asla anlamadım. Şimdi benim düşüncem şudur: bellek bir program sırasında tahsis edilir, bu yüzden bir program çalıştırmadan önce depolama alanı nasıl dağıtılır? Bu beni en çok etkileyen bir sorudur. Hafıza, çalışma zamanından önce nasıl tahsis edildiğini okurken anlamsızdır. Bir programı derleyebilirim ve asla 2 hafta boyunca çalıştırılamaz, bundan önce belleği nasıl ayırabilirim? Görebildiğiniz gibi bir şey kaçırıyorum.

2) sabit yığın dinamik: c, simge aralıkları statik bağlanan, ancak ayırma

  • benim örneğin doğru olduğundan emin olmak isteyen beyan zamanda yapılır ++ olabildiğince (VS 2015'te test edilmiştir) int size = 100; int veri [boyut];

  • ama bu

    const int size = 100; 
    int data[size]; 
    
  • benim tahminim nedeniyle const programı bu ifadeyi isabet önce boyutunu bilmesi için derleme sırasında görülen gerçeğine "sabit" olduğunu olurdu bu işler doğru?

3) Yığın-dinamik: Bu benim prof bize bir örnek verdi asla

  • simge aralıkları dinamik olarak (çalıştırma zamanında yapılan) bağlı ve bellek ayırma dinamiktir edilir Herhangi biri bana bir tane veriyor mu?

4) Sabit Yığın dinamik: Sabit yığın dinamik benzer: bağlayıcı depolama dinamik ama (istenen ve depolama yığından tahsis edildiğinde, yani, yığın olup, yapılır bağlanma)

ayırmadan sonra sabitlenir ben doğru isem
  • bu, tüm dinamiktir nedeniyle ayrılan bellek yığını olduğunu, aslında bu

    int * x = new int [size]; 
    
  • örneğidir Okunmuş bellek ve sabit kısım, büyüklüğün büyüyemeyeceği gerçeğine dönüşüyor, düzeltiliyor mu?

zaman ayırdığınız için teşekkür düşünmek istiyorum, pardon bu sorular ilköğretim olabilir ama insanlar soran ve yaptığım andan karışık cevaplar ve alırsanız

5) Öbek-dinamik neye inanacağımı bilmiyorum: alt simge aralıkları ve depolama tahsisinin bağlayıcı dinamiktir ve

  • benim prof dinamik büyüyebilir beri bir örnek olarak C# ArrayList kullanılan herhangi bir kaç kez değiştirebilirsiniz, ancak bu sadece ben arraylist düşündüğü için olmak karıştı sadece bir cl ilkel dizi ile çalışan eşek. Eğer dizi büyürse, sadece çöp toplar ve daha büyük olanı tahsis eder ve öğeleri yığın-dinamiği sabit hale getirecek şekilde hareket ettirir mi?
+1

Bu çok geniş. – Savior

+0

@Pillar, kelimenin tam anlamıyla benim çıkmam gereken tek şey, sadece bu 5 kavramları anlamaya çalışmıyorum, aynı zamanda çalışmaların zamana göre nasıl çalıştığını anlamaya çalışıyorum –

+1

Bir seferde bir soru sorun. – Savior

cevap

1

"Çalışma öncesi zamandan önce", programın bir örneği oluşturulduğunda (bir programı başlatmayı seçtiğinizde, işletim sistemi bunu gerçekleştirdiğinde), ancak programın başlatılmasından önce belleğin ayrıldığı anlamına gelir. .

Evet, bir const int değeri derleme zamanında biliniyor, bu nedenle derleyici, derleme zamanında dizinin boyutunu bilmek için bunu kullanabilir. Bunun yerine bir değişken kullanırsanız, diziyi dinamik olarak çalışma zamanında ayırmanız gerekir.

"Yığın dinamik", değişkenlerin işlevin parametreleri gibi bir işlev çağrısında oluşturulduğu anlamına gelir. Çalışma zamanı ve geçici olup yığında bulunurlar. Derleme zamanında büyüklükleri bilinmemektedir.

"Sabit yığın dinamiği" örneğiniz muhtemelen doğru değil, bu nedenle, dizinin boyutunu belirtmek için bir değişken değil, bir değişkeni ima ettiğinizi varsayalım. "Sabit" derleme zamanında bilinir, bu yüzden bir sabit/literal kullanmanız gerekir. "Sabit yığın dinamiği", sabit boyutlu bir dizidir, ancak yığın üzerinde dinamik olarak ayrılmıştır.

"Yığın dinamik", boyutun değişebileceği anlamına gelmez, ancak boyut yalnızca çalışma zamanında bilinir. Diziler doğal olarak boyutu değiştiremezler, çünkü onun yanında gelişebilecek daha fazla bitişik bir bellek olduğunu garanti edemezsiniz. Normalde daha büyük bir dizi oluşturmak, yeni, daha büyük bir dizi oluşturmak ve eski içeriği ona kopyalamak ve eski, küçük diziyi silmek zorunda olduğunuz anlamına gelir.

+1

Mükemmel, teşekkürler! –

İlgili konular