2010-07-18 13 views
5

के लिए सी ++ सुविधाओं से बचा जाना चाहिए मुझे सी ++ सुविधाओं की एक सूची संकलित करने में दिलचस्पी है जो एम्बेडेड सिस्टम में उपयोग के लिए सलाह नहीं दी जाती है (और जो लोगों को सी ++ पर सी की सिफारिश कर सकती है)। कृपया जोड़ने का प्रयास करें कि यदि आप जानते हैं, या दूसरों के उत्तरों के कारण क्यों जोड़ते हैं।एम्बेडेड विकास

यहाँ पता नहीं क्यों एक शुरुआत (केवल एक मैं जानता हूँ कि)

  • गतिशील बहुरूपता के लिए एक है, है, लेकिन किसी ने कहा कि यह "महंगा"

उत्तर

4

कुछ विशेषताओं को रन-टाइम समर्थन की आवश्यकता हो सकती है, इसलिए यदि आपको आवश्यक समर्थन याद आती है, तो आपको उन सुविधाओं से बचना चाहिए।

  • अपवाद
  • RTTI
  • गतिशील स्मृति आवंटन
  • आभासी विरासत (यह एक के बारे में अनिश्चित थोड़ा)

: विशेष रूप से, निम्नलिखित विशेषताएं आम तौर पर अतिरिक्त रन-टाइम समर्थन की जरूरत लोग आमतौर पर टेम्पलेट का जिक्र करते हैं, लेकिन वे केवल एक उन्नत मैक्रो सुविधा हैं - ताकि आप उन्हें एम्बेडेड सिस्टम में आसानी से उपयोग कर सकें। फिर भी, आप उनसे बचना चाहेंगे क्योंकि वे संकलन के बाद कोड ब्लोट का कारण बन सकते हैं।

आपका एम्बेडेड सिस्टम दस्तावेज़ीकरण के साथ आना चाहिए कि क्या, यदि कोई है, तो C++ (और अन्यथा) के लिए रन-टाइम समर्थन उपलब्ध है।

+5

वर्चुअल विरासत को रन-टाइम समर्थन की आवश्यकता नहीं है। यह एक लागत पर आता है, हालांकि (बेस क्लास सदस्यों तक पहुंचने पर एक अतिरिक्त संकेत)। यदि आपको उस रन-टाइम लागत से बचने की आवश्यकता है, तो आपको वर्चुअल विरासत से बचने की आवश्यकता है। – sbi

3

आप सुविधाओं के आधार पर चयन करना चाहिए आपका डिवाइस। यह कुछ फीचर के लिए समझदार हो सकता है या शायद नहीं। यह अपने वास्तुकला पर निर्भर करता है। उदाहरण के लिए, एंड्रॉइड मंच के लिए Google का सी ++ कंपाइलर का एक कम संस्करण है। सरल आम नियम निर्माण से बचने के लिए है जिसके परिणामस्वरूप भारी रनटाइम कोड होगा।

9

संयुक्त स्ट्राइक सेनानी कोडिंग मानक यहां: http://www2.research.att.com/~bs/JSF-AV-rules.pdf एम्बेडेड प्रोग्रामिंग के लिए सी ++ का उपयोग करने के तरीके के बारे में एक बहुत अच्छा अवलोकन है।

डायनामिक पॉलिमॉर्फिज्म पर प्रतिबंध 90 के दशक से एक धारणा है, और इसका कोई तर्कसंगत आधार नहीं है। एक स्विच और कॉल करने के लिए वर्चुअल फ़ंक्शन को कॉल करने में अब कोई समय नहीं लगता है। यदि आप वर्चुअल फ़ंक्शन कॉल से बचने जा रहे हैं, तो आप सी

2
  1. अत्यधिक टेम्पलेट उपयोग। विभिन्न पैरामीटर के साथ एकाधिक टेम्पलेट इंस्टॉलेशन के परिणामस्वरूप आपके ऑब्जेक्ट कोड में एक ही फ़ंक्शन की कई प्रतियां होंगी, इसलिए इसके आकार में वृद्धि हो रही है, जब तक कि आपका कंपाइलर समान कोड को फोल्ड करने के लिए पर्याप्त स्मार्ट न हो (उदाहरण के लिए यदि टेम्पलेट T पर निर्भर करता है, int के साथ तत्कालता अधिकांश मामलों long के साथ तत्काल के समान हैं)।
    टेम्पलेट्स के साथ कोड आकार में वृद्धि से बचने का एक तरीका, आप अपने कोड का एक असुरक्षित कोर संस्करण लिख सकते हैं, और पतले प्रकार-सुरक्षित टेम्पलेट रैपर हैं।
  2. dynamic_cast बहुत महंगी CPU-wise हो सकता है क्योंकि इसे कक्षा पदानुक्रम को स्कैन करने और कक्षा के नामों की स्ट्रिंग तुलना करने की आवश्यकता है [उद्धरण वांछित]।
संबंधित मुद्दे