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
.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.
JsonRequestBehavior neden gerekli?...
Neden uçucu C Gerekli?...
Objective-C: Neden autorelease (@autor...
Neden prototip kurucu ayarlamak için g...
Neden functools.Python: kısmi gerekli?...