मैं ऐसे प्रोग्राम पर काम कर रहा हूं जो एक महत्वपूर्ण डेटा संरचना को प्रोग्राम-परिभाषित डिलीमीटर के साथ एक संरचित स्ट्रिंग के रूप में संग्रहीत करता है (इसलिए हमें स्ट्रिंग को चलाने और हमें आवश्यक जानकारी निकालने की आवश्यकता है हम जाते हैं) और हम इसे एक अधिक संरचित डेटा प्रकार में परिवर्तित करना चाहते हैं।एक आवंटन में एक स्ट्रिंग युक्त स्ट्रक्चर को आवंटित करें
संक्षेप में, इसमें एक फ़ील्ड के साथ एक स्ट्रक्चर की आवश्यकता होगी जिसमें वर्णन किया गया है कि किस प्रकार के डेटा में संरचना है और एक और फ़ील्ड जो डेटा के साथ स्ट्रिंग है। स्ट्रिंग की लंबाई हमेशा आवंटन समय पर जानी जाएगी। हमने परीक्षण के माध्यम से निर्धारित किया है कि इन डेटा प्रकारों में से प्रत्येक के लिए आवश्यक आवंटन की संख्या दोगुना करना एक अस्वीकार्य लागत है। संरचना के लिए स्मृति आवंटित करने का कोई तरीका है और एक आवंटन में संरचना में निहित std :: स्ट्रिंग है? अगर हम cstrings का उपयोग कर रहे थे तो मेरे पास संरचना में एक char * होगा और संरचना और स्ट्रिंग के लिए पर्याप्त ब्लॉक आवंटित करने के बाद इसे संरचना के अंत में इंगित करें, लेकिन यदि संभव हो तो हम std :: स्ट्रिंग को प्राथमिकता देंगे।
मेरा अधिकांश अनुभव सी के साथ है, इसलिए कृपया यहां प्रदर्शित किसी भी सी ++ अज्ञानता को क्षमा करें।
यदि मैं इसे सही ढंग से समझता हूं, तो निर्माण के बाद स्ट्रिंग विकसित नहीं हो सकती है, और जो भी पूरी वस्तु का प्रबंधन करता है, उसकी स्मृति को प्रबंधित किया जाएगा ... क्योंकि आप सी रास्ता जा रहे हैं, क्यों न केवल 'char * 'का उपयोग करें? सी तारों के सबसे बुरे हिस्सों को स्मृति का प्रबंधन करने की आवश्यकता है, लेकिन ऐसा लगता है कि आपके मामले में यह कोई समस्या नहीं है, है ना? –
+1 ** ** साबित करने के लिए ** सभी अर्ध-मुर्गा से बाहर जाने से पहले अनुकूलन की आवश्यकता! –
यदि आप * वास्तव में * सी-स्ट्रिंग के बजाय 'std :: string' का उपयोग करने के इच्छुक हैं, तो आप जो कुछ करना चाहते हैं उसे प्राप्त करने के लिए कस्टम आवंटक का उपयोग करके देख सकते हैं। इससे आप अपने तारों को एक ही आवंटन में पूल करने की अनुमति दे सकते हैं, लेकिन फिर भी इसे एक ही समय में आवंटित सब कुछ (यानी आपकी संरचना) नहीं मिलेगा और यह शायद रखरखाव दुःस्वप्न होने का अंत हो जाएगा। शायद सी-तारों से चिपकने के लिए सबसे अच्छा है। –