क्या कोई विशेष वैश्विक सरणी शून्य पर प्रारंभ करने के लिए जीसीसी को बताने का कोई तरीका नहीं है?फोर्स जीसीसी को कुछ ग्लोबल्स शून्य करने के लिए मजबूर करना
मैं एक बड़ी डेटा संरचना है कि मेरे कोड का प्रबंधन करता है भंडारण के लिए स्मृति का एक बड़ा हिस्सा आरक्षित करना चाहते हैं, तो मैं कहना:
#define SIZE_16_MB 0x01000000
BYTE mChunkSpace[SIZE_16_MB];
समस्या यह है कि crtinit() इस स्थान प्रारंभ करने में एक लाख साल लेता है शून्य करने के लिए, और यह बिल्कुल जरूरी नहीं है।
क्या कोई तरीका है कि मैं इसे उस स्थान को शुरू करने के लिए मजबूर नहीं कर सकता हूं?
वर्तमान में मैं एक स्मृति पता हार्ड कोडिंग कर रहा हूं जो लिंकर के बारे में जानता है, लेकिन यह चीजों को करने का एक विशेष रूप से मजबूत तरीका नहीं है।
इसके अतिरिक्त, यह एक धीमी एम्बेडेड प्रो (50 मेगाहर्ट्ज माइक्रोब्लैज) है, इसलिए यह न मानें कि मैं एक पीसी के बारे में बात कर रहा हूं। यह वास्तव में उस स्थान को शून्य करने में लंबा समय लगता है।
मैंने इस पर खुद को ठोकर खाई, लेकिन मुझे यह पता लगाना मुश्किल था कि यह कैसे कार्यान्वित किया जाता है और यदि यह अपने लक्षित मंच पर ओपी के लिए उपलब्ध होगा। मैं '.noinit' सेक्शन को '.bss' सेक्शन में बता सकता हूं। क्या इसका मतलब यह शून्य प्रारंभ नहीं हुआ है * और * निष्पादन योग्य में ~ 16 एमबी स्पेस नहीं लेता है? –
@EdS। 'आकार-ए-एक्स' मुझे दिखाता है कि स्मृति खंड का पता '.bsssection के पते से अलग है। – ouah
मैं जो कुछ पढ़ता हूं उसे दोहरा रहा हूं: http://www.nongnu.org/avr-libc/user-manual/mem_sections.html –