SORU
2 Mart 2012, Cuma


Neden .frekans kesimi gerekli?

Biliyorum ne global ve statik değişkenler .data segmente saklanan ve başlatılmamış verileri .bss segmentinde. Ben neden özel var mı başlatılmamış değişkenler için kesimi anlamayacak ne var? Eğer ilklenmemiş değişken değeri zamanında atanan varsa, değişken hala .bss segmentinde sadece mevcut mu?

Aşağıdaki programda, a .data segmentinde, b .bss kesimi; bu doğru mu? Eğer benim anladığım yanlışsa lütfen beni düzeltin.

#include <stdio.h>
#include <stdlib.h>

int a[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9};
int b[20]; /* Uninitialized, so in the .bss and will not occupy space for 20 * sizeof (int) */

int main ()
{
   ;
}  

Ayrıca, programın ardından, düşünün

#include <stdio.h>
#include <stdlib.h>
int var[10];  /* Uninitialized so in .bss */
int main ()
{
   var[0] = 20  /* **Initialized, where this 'var' will be ?** */
}

CEVAP
2 Mart 2012, Cuma


.bss segment bir iyileştirmedir. Tüm .bss segment olduğu açıklanan bir tek sayı, muhtemelen 4 veya 8 bayt bayt, o verir boyutunda çalışan süreç ise .data bölüm kadar büyük miktar boyutları değişkenleri başlatıldı. Böylece, .bss dosyaları daha küçük ve daha hızlı yükleme yapar. Aksi halde, değişkenler sıfır açık başlatma .data segmentinde olabilir; program sabit preslenmiş farkı olurdu. (Ayrıntılı olarak, .bss nesnelerin adresi muhtemelen .data segmentinde ise adresi de farklı olacaktır.)

İlk programda, a .data segmentinde olacağını ve b yürütülebilir .bss segmentte olur. Program yüklendikten sonra, farkı önemsiz hale gelir. Zaman 20 * sizeof(int) bayt kaplar çalıştırın.

, var ikinci program main() değiştirir boşluk ve atama ayrılmış olan alan. var alanı .data segment yerine .bss segment anlatılan çok olur, ama bu program çalışırken çalışma şeklini etkilemez.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Amir Parmar

    Amir Parmar

    25 Kasım 2010
  • Eric Magidson

    Eric Magidso

    4 Ocak 2009
  • TWiT Netcast Network

    TWiT Netcast

    27 EKİM 2005