2012-06-15 12 views
5

यह लिनक्स पर जीसीसी 4.4.6 है।जीसीसी संकलन समय और स्रोत कोड में सरणी आकार के रूप में बदल रहे स्मृति उपयोग

gcc bizarre.c 

फिर संकलक स्मृति की 4 जी का उपयोग करता है, और एक लंबा समय लगता:

यहाँ व्यवहार

bizarre.c

double a[500000000]; 

main() { 
} 

अगर मैं संकलन इस का उपयोग कर रहा है।

यदि मैं सरणी आकार 50000000 बना देता हूं, तो संकलन में काफी कम स्मृति और समय लगता है।

ऐसा लगता है कि संकलक उस कोड को निष्पादित कर रहा है जो संकलन कर रहा है।

मुझे एहसास है कि इस तरह एक भारी सरणी बनाना सर्वोत्तम अभ्यास नहीं हो सकता है, लेकिन कोई स्पष्टीकरण?

+0

आप 32 या 64 बिट निष्पादन योग्य के रूप में संकलित करते हैं? –

+0

कोई अनुकूलन झंडे? आप संभावना से अधिक एक स्टैक ओवरफ़्लो में भागने जा रहे हैं ... ऑप्टिमाइज़ेशन चालू होने के साथ, यह चर संभवतया समाप्त हो गया है यदि ऑप्टिमाइज़ेशन का उपयोग -0 –

+0

@ 0A0D से अधिक है: यह सरणी वैसे भी '.bss' अनुभाग में भर रही है, कोई ढेर शामिल नहीं है ... – sarnold

उत्तर

6

यह --बिल्ड-आईडी से संबंधित एक ज्ञात लिंकर बग है, जो अब मुख्य लाइन पर तय है। http://sourceware.org/bugzilla/show_bug.cgi?id=12451 देखें कुछ डिस्ट्रोज़ ने निक के पहले पैच को लिया था जिसने .bss पर एक चेकसम की गणना की, जिसके लिए .bss अनुभाग आवंटित और शून्य किया जाना आवश्यक था। अपने distro के लिए शिकायत करें।

संबंधित मुद्दे