2012-06-15 7 views
5

Bu Linux'ta gcc 4.4.6 olduğunu. gcc derleme zamanı ve bellek kullanımı kaynak kodundaki dizi boyutu olarak değişiyor

gcc bizarre.c 

Sonra derleyici bellek 4G kullanır ve uzun zaman alır:

İşte bu kullanarak derlemek davranış

bizarre.c

double a[500000000]; 

main() { 
} 

bu.

Dizi boyutunu 50000000 yaparsam, derleme daha az bellek ve zaman alır.

Derleyici, derledikleri kodu çalıştırıyor gibi.

Bu şekilde humojen bir dizi oluşturmanın en iyi uygulama değil, herhangi bir açıklama olabileceğini anlıyorum.

+0

32 veya 64 bit yürütülebilir dosya mı derliyorsunuz? –

+0

optimizasyon bayrakları yok mu? Optimizasyon açıkken bir yığın taşmasıyla karşılaşacaksınız, optimizasyonun -O0 –

+0

@ 0A0D'den daha yüksek olması durumunda bu değişken muhtemelen elimine edilir: bu dizi zaten '.bss' bölümünde doldurulur. yığın yok ... – sarnold

cevap

6

Artık ana hat üzerinde sabitlenmiş olan --build-id ile ilgili bilinen bir bağlayıcı hata var. Bkz. http://sourceware.org/bugzilla/show_bug.cgi?id=12451 Bazı dağıtımlar Nick'in daha önceki bir yamasını aldı. Bu, .bss bölümünün ayrılmasını ve sıfırlanmasını gerektiren .ss üzerinde bir sağlama toplamını gereksiz olarak hesapladı. Senin dağıtımına şikayet et.