İlişkili tanımsız davranışı dışında genel bir dizi erişim? | Netgez.com
SORU
17 EKİM 2014, Cuma


İlişkili tanımsız davranışı dışında genel bir dizi erişim?

Ben sadece sınıf benim bugün --- C okuma Kodu ve giriş sınavı vardı ve gereken cevabı eğer program çalışıyorsa ekranda görünecektir. Bir soru ilan a[4][4] gibi bir global değişken ve bir noktada bu program, çalışır erişim a[27][27], o yüzden cevap verdim gibi bir şey "Accessing an array outside its bounds is an undefined behavior" ama öğretmenim dedi a[27][27] bir değeri 0.

Daha sonra, 26* *"tüm başlatılmamış golbal değişken 4 ** ayarlanır" gerçek ya da değil. olup olmadığını kontrol etmek için denedim Evet, doğru gibi görünüyor.

Åžimdi sorum ÅŸu:

  • Fazladan bir bellek gibi görünüyor temizlenmiÅŸ ve kodun çalışması için ayrılmış. Ne kadar bellek ayrılmış mı? Neden bir derleyici olması gerekenden daha fazla bellek ayırmak, ve ne için?
  • a[27][27] çevre için 0 olacak?

Düzenleme :

, a[4][4] bu kodsadeceglobal değişken ilan ve main() daha çok yerel yüzler vardır.

that code DevC tekrar denedim . Hepsi 0. Ama bu Vyktor iÅŸaret ettiÄŸi gibi en deÄŸer 0 ama rastgele bir deÄŸeri var VSE, doÄŸru deÄŸildir.

CEVAP
17 EKİM 2014, Cuma


Haklıydın: tanımsız davranış ve her zaman 0 üreten. olamaz sayısıdır

Olarak neden görüyorsun sıfır bu durumda: modern işletim sistemleri için bellek ayrılamadı süreçlerinde nispeten iri taneli parçalar denilen sayfalar çok daha büyük daha bireysel değişkenler (en az 4KB üzerinde x 86). Tek bir global değişken varsa, bir yerlerde bir sayfa üzerinde yer alacak. a türü olduğunu varsayarsak int[][] ints sisteminizde dört bayt yaklaşık 500 bayt a başından itibaren yer alacak. Bu kadar a sayfanın başına yakın, a[27][27] gerçek bellek ile desteklenen ve okuma olacak eriştiği sürece sayfa hatası / erişim ihlaline neden olmaz.

Tabii ki, bu güvenmemelisin. Örneğin, a diğer genel değişkenler yaklaşık 4KB bulunuyorsa o zaman a[27][27] bellek tarafından desteklenen olacak ve süreci okumak için bir zaman kaza olacak.

Eğer süreci çökmesine bile değer 0 o zaman güvenemezsin. Hiçbir şey yapmaz ama bu değişken ayıran çok kullanıcılı işletim sistemi çok basit bir program var ve bu değer baskı, muhtemelen 0 göreceksiniz. İşletim sistemleri bir süreç hassas verileri veya kullanıcı başka bir sızıntı, böylece bir işlem için bellek teslim zaman bazı iyi huylu değer (genellikle sıfır) bellek içeriğini ayarlayın.

Ancak, okuma keyfi hafıza sıfır olacak genel bir garantisi yok. Bellek ayırma başlatılmış olmadığı bir platformda programınızı çalıştırabilir, ve dün onun kullanım için olanlar görür.

Eğer a sıfır değerleri için başlatılan yeterince diğer genel değişkenler izlediyseniz de, a[27][27] erişim orada ne olursa olsun, görürsün o zaman.

Bunu PaylaÅŸ:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • 24 Канал

    24 КанаÐ

    5 ÅžUBAT 2006
  • MofoHifi Records

    MofoHifi Rec

    15 HAZİRAN 2006
  • Rickymon Tero

    Rickymon Ter

    1 Ocak 2007