बिना मैं एक स्थिति है जहाँ मैं इस तरह के रूप डेटा की बड़ी (कई जीबी की) मात्रा में संसाधित करने की जरूरत है:आरंभ std :: चार * से स्ट्रिंग प्रतिलिपि
- कई छोटे (सी चार जोड़कर एक बड़ी स्ट्रिंग का निर्माण *) तार
- स्ट्रिंग
- एक सी ++ प्रसंस्करण के लिए स्थिरांक std :: स्ट्रिंग में स्ट्रिंग परिवर्तित ट्रिम (रीड ओनली)
- दोहराने
दा प्रत्येक पुनरावृत्ति में टा स्वतंत्र हैं।
मेरा सवाल यह है कि, मैं इस समय आवंटित स्मृति उपयोग को कम करने (यदि संभव हो तो समाप्त करना) छोटा करना चाहता हूं, क्योंकि फिलहाल यह मेरी सबसे बड़ी प्रदर्शन समस्या है।
क्या सी स्ट्रिंग (char *) को एक stl C++ स्ट्रिंग (std :: string) में परिवर्तित करने का कोई तरीका है बिना std :: स्ट्रिंग को आंतरिक रूप से आवंटित/डेटा कॉपी करने के लिए?
वैकल्पिक रूप से, क्या मैं स्ट्रिंगस्ट्रीम या किसी बड़े बफर का पुन: उपयोग करने के समान कुछ उपयोग कर सकता हूं?
संपादित करें: जवाब के लिए धन्यवाद, स्पष्टता के लिए, मुझे लगता है कि एक संशोधित सवाल होगा:
मैं कुशलता से कैसे बना सकते हैं (कई संलग्न कर देता है के माध्यम से) एक STL सी ++ स्ट्रिंग। और यदि एक लूप में यह क्रिया निष्पादित कर रही है, जहां प्रत्येक पाश पूरी तरह से स्वतंत्र है, तो मैं इस आवंटित स्थान का पुन: उपयोग कैसे कर सकता हूं।
आपका समाधान लगता है कि मैं क्या करता हूं, हालांकि, जब आप कहते हैं कि "आप केवल उसी सी ++ स्ट्रिंग का उपयोग कर सकते हैं" क्या आपका मतलब स्पष्ट() का उपयोग करना है, और फिर अगली स्ट्रिंग बनाना जारी रखना है? – Akusete
यह समाधान मेरे लिए अपनाने के लिए सबसे आसान है, वर्तमान में, हालांकि मुझे यकीन नहीं है कि पुन: उपयोग वास्तव में मानक द्वारा निर्दिष्ट किया गया है (हालांकि यह मेरे कार्यान्वयन पर काम करता प्रतीत होता है) – Akusete
स्पष्ट() का उपयोग करना चाहिए।जहां तक मुझे पता है, स्पष्ट() स्ट्रिंग द्वारा उपयोग की गई स्मृति को मुक्त नहीं करता है, और इसलिए आरक्षित() द्वारा आवंटित स्थान को प्रभावित नहीं करता है। –