मैं अपने विश्वविद्यालय के लिए एक समूह वरिष्ठ परियोजना पर काम कर रहा हूं और मैंने अपना कोड काम करने की कोशिश में एक बड़ी बाधा में भाग लिया है।जब आप अपने एम्बेडेड कंपाइलर में ऑपरेटर नया या एसटीएल समर्थन नहीं होता है तो आप सी ++ कैसे कर सकते हैं?
हमारे 8 बिट एटमेल माइक्रोकंट्रोलर के लिए हमारे पास कंपाइलर नया या समर्थन ऑपरेटरों का समर्थन नहीं करता है, और यह सी ++ एसटीएल का समर्थन नहीं करता है। मैं इसे सी में प्रोग्राम कर सकता हूं, लेकिन मुझे ए * एल्गोरिदम लागू करना है जिसे मैंने पहले कभी नहीं किया है। जबकि मैंने शुरुआत में सी की कोशिश की है, मुझे जल्द ही एहसास हुआ कि मैंने पहले कभी शुद्ध सी नहीं किया था। Structs और कार्यों के साथ वस्तुओं को मॉडल करने का प्रयास करना मुझे धीमा कर रहा है क्योंकि मुझे बहुत क्लीनर सी ++ वाक्यविन्यास में इतना उपयोग किया जाता है।
परवाह किए बिना, मेरी compilers कमियों के लिए सटीक शब्द यहां पाया जा सकता है: http://www.nongnu.org/avr-libc/user-manual/FAQ.html#faq_cplusplus
उन्हें दूर करने के लिए और अभी भी सी ++ मैं निम्नलिखित संभावनाओं पर विचार किया है का उपयोग करें। 1) कुछ भी आवंटित न करें, केवल ढेर पर निश्चित सरणी उत्पन्न करने के लिए टेम्पलेट का उपयोग करें। 2) ऑब्जेक्ट्स के लिए कन्स्ट्रक्टर को कॉल करने के लिए कुछ हैक आवंटित करें और एक बार मैंने उनके लिए जगह आवंटित की है। प्लेसमेंट नया विकल्प नहीं है क्योंकि नया ऑपरेटर नहीं है। 3) बस सी का उपयोग करें और इसे चूसो, यह एक माइक्रोकंट्रोलर क्यों मुझे कल्पना मिल रही है? 4) एक बेहतर कंपाइलर खोजें जो शायद $$$ खर्च करेगा।
दूसरा विकल्प सबसे कठिन है लेकिन इस कोड को मैं कैसे लिख सकता हूं इसके संदर्भ में सबसे बड़ा भुगतान होगा। हालांकि, मुझे लगता है कि अगर मुझे यह गलत लगता है तो इसे डिबगिंग करना एक बड़ा दर्द हो सकता है। मैं ढेर पर वस्तुओं को बनाने, आवंटित स्थान में अपनी बिट्स की प्रतिलिपि बनाने और फिर ऑब्जेक्ट में बिट्स को शून्य करने के बारे में सोच रहा हूं, इसलिए यह इसके विनाशक को नहीं बुलाता है। ऐसा करने के लिए मैं बाइट गिनती प्राप्त करने के लिए सीधे एक हस्ताक्षरित चार सूचक और आकार के ऑपरेटर के साथ बिट्स तक पहुंच जाएगा।
यह भयानक लगता है और मुझे नहीं पता कि यह विश्वसनीय रूप से काम कर सकता है, लेकिन मैं इसे देख रहा हूं। मुझे पता है कि vtables एक समस्या हो सकती है लेकिन मुझे कोई vtables होने का इरादा नहीं है क्योंकि यह केवल 8 बिट माइक्रोकंट्रोलर है।
यदि मुझे सही याद है कि 8 बिट एटमल्स में गतिशील स्मृति एला मॉलोक/नई के बारे में सोचने के लिए पर्याप्त RAM नहीं है। – lothar
अगर मैं उन ऑपरेटरों को अधिभारित कर सकता हूं तो मैं नियंत्रित कर सकता हूं कि स्मृति कहां से आती है। यह ढेर या ढेर पर हो सकता है। –
मुझे पता चला कि मेरे पास केवल 1 केबी खेलने के लिए था, जिसने अनिवार्य रूप से ए * को मेरे रोबोट के लिए व्यवहार्य पथ खोजक के रूप में अस्वीकार कर दिया था। अब मैं एक साधारण डीएफएस का उपयोग कर रहा हूं जब तक कि मैं एक और रैम के साथ एक प्राप्त नहीं कर सकता। –