मैं नई सी ++ भाषा सुविधाओं जैसे एम्बेडेड सिस्टम (एसआरएएम के 16 केबी और फ्लैश के 64 केबी, कॉर्टेक्स एम 4) पर इटरेटर का उपयोग कर देख रहा हूं और एक आश्चर्यजनक रोडब्लॉक मारा। पृथ्वी पर इतने बड़े पैमाने पर इटरेटर क्यों हैं? मैं इस धारणा के तहत था कि वे मूल रूप से कुछ सूचक अंकगणितीय या अनुक्रमण हैं। एसटीएल कुछ अप्रत्याशित कोड में खींच रहा है?सी ++ इटरेटर्स का उपयोग क्यों() या इंडेक्सिंग की तुलना में कोड आकार में भारी वृद्धि करता है?
ये निम्नलिखित झंडे का उपयोग करते हुए here से gcc-arm-none-eabi-4_9 टूलचेन के साथ विंडोज़ पर किनेटिस डिज़ाइन स्टूडियो का उपयोग कर रहे हैं।
arm-none-eabi-g++ -mcpu=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16 -Os -fmessage-length=0 -fsigned-char -ffunction-sections -fdata-sections -fsingle-precision-constant -flto -g3 -I"../Sources" -I"../Includes" -std=gnu++11 -fabi-version=0 -std=c++11 -MMD -MP -MF"Sources/System.d" -MT"Sources/System.o" -c -o "Sources/System.o" "../Sources/System.cpp"
आईटीएम_SendChar बस एक सिंगल लेता है और इसे एक रजिस्टर में रखता है।
std::string input = "Oh hai there! :D\n";
#ifdef char_array
// .text 7352
// .data 376
// .bss 236
for(int i = 0; i < input.size(); i++)
ITM_SendChar(input[i]);
#endif
#ifdef char_at
// .text 7392
// .data 376
// .bss 236
for(int i = 0; i < input.size(); i++)
ITM_SendChar(input.at(i));
#endif
#ifdef char_itterator
// .text 39744
// .data 384
// .bss 252
for(char some_char : input)
ITM_SendChar(some_char);
#endif
#ifdef char_itterator_auto
// .text 39744
// .data 384
// .bss 252
for(auto some_char : input)
ITM_SendChar(some_char);
#endif
#ifdef char_itterator_auto_no_copy
// .text 39744
// .data 384
// .bss 252
for(auto& some_char : input)
ITM_SendChar(some_char);
#endif
क्या आप कुछ डीबग कॉन्फ़िगरेशन में संकलित कर रहे हैं? मैं आपके निर्माण पर्यावरण को नहीं जानता, लेकिन, उदाहरण के लिए, विजुअल सी ++ की डीबग कॉन्फ़िगरेशन में सभी प्रकार की जांच की जाती है। – JohnB
सबसे पहले आपको सेब से सेब की तुलना करना चाहिए और लूप के लिए श्रेणीबद्ध प्रतियों में प्रतिलिपि बनाना नहीं चाहिए। यदि आप 'ऑटो और some_char: इनपुट' का उपयोग करते हैं तो क्या होता है? – NathanOliver
सुझाव के लिए धन्यवाद @ नाथनऑलिवर, लेकिन कोई बदलाव नहीं। मैंने परिणामों को मेरे प्रश्न में जोड़ा। और जॉनबी डीबगिंग के लिए -जी 3 ध्वज है लेकिन इसे हटाने से कोई फर्क नहीं पड़ता। जहां तक मुझे पता है कि केडीएस में डिबगिंग के दौरान अतिरिक्त कुछ भी शामिल नहीं है। – hak8or