2011-03-24 9 views
8

क्या किसी को पता है कि कोई एसटीएल इंटरफेस संगत स्ट्रिंग क्लास है जो ढेर पर छोटे स्ट्रिंग्स (एक निश्चित थ्रेसहोल्ड तक) और बड़े तारों के लिए ढेर के लिए स्मृति आवंटित करता है?स्ट्रिंग क्लास छोटे तारों के लिए ढेर पर आवंटित?

मैं एक प्रोग्राम को अनुकूलित करने के लिए देख रहा हूं और मैं छोटे स्थानीय तारों का उपयोग कर रहा हूं जो आसानी से ढेर पर आवंटित होने के बजाय ढेर पर फिट हो सकते हैं।

+2

विजुअल स्टूडियो में यह अनुकूलन (बहुत छोटी स्ट्रिंग के लिए, केवल कुछ वर्ण हैं) जबकि जीसीसी ने कॉपी-ऑन-लिखित को प्राथमिकता दी है। –

+0

हम विजुअल स्टूडियो 2010 का उपयोग करते हैं, क्या आप कहीं भी इस अनुकूलन (एमएसडीएन या अन्यत्र) के बारे में पढ़ सकते हैं? – ROAR

+1

अधिकांश कंपाइलर ऐसा करेंगे, यदि आपके पास हाल ही में पर्याप्त संस्करण है। –

उत्तर

1

आप std::basic_string (यह तीसरा टेम्पलेट तर्क है) के लिए एक कस्टम आवंटक प्रदान कर सकता है। This answer बताता है कि इसका उपयोग कैसे किया जा सकता है और एक स्टैक-आवंटक के कार्यान्वयन के लिंक जो इसका उपयोग किया जा सकता है।

+4

std :: स्ट्रिंग का कुछ कार्यान्वयन ऐसा करता है, इसे छोटे स्ट्रिंग अनुकूलन कहा जाता है। एक त्वरित Google आपको बताएगा कि आपका क्या करता है या यदि कोई विकल्प है तो आप इसका उपयोग कर सकते हैं। – Pete

1

जीसीसी से vstring (__versa_string) कार्यान्वयन छोटे स्ट्रिंग अनुकूलन कर सकता है और इसमें एक स्ट्रिंग स्ट्रिंग इंटरफ़ेस हो सकता है। यदि आप जीसीसी का उपयोग करते हैं तो ext/vstring को शामिल करना काफी आसान है। अन्यथा आप इसे अपने कंपाइलर/enviroent में अनुकूलित करने में सक्षम हो सकते हैं।

0

__versa_string एसएसओ संस्करण स्टैक पर 15 से अधिक बाइट्स स्टोर नहीं कर सकता है और यदि ऐसा होता है, तो यह स्ट्रिंग आकार (http://codepad.org/2M7N9cTu) पर ध्यान दिए बिना 16 बाइट्स को सुरक्षित रखता है।

http://www.and.org/ustr/ एक स्टैक बफर का पुन: उपयोग कर सकता है, लेकिन मुझे डेबियन व्हीजी 64 बिट के तहत इसके साथ जोड़ने में समस्याएं थीं।

http://freecode.com/projects/str-class एक स्टैक बफर का पुन: उपयोग कर सकते हैं। http://code.google.com/p/libglim/source/browse/trunk/gstring.hpp
यह एक सीमित एसटीएल अनुकूलता है: std :: ostream साथ प्रयोग के लिए लागू किया basic_streambuf

मैं एक शीर्ष लेख-केवल स्ट्रिंग वर्ग जो सिर्फ चार बाइट्स का उपयोग करता है और एक ढेर बफर का पुन: उपयोग कर सकते हैं लिखा था।

1

यह प्राचीन प्रश्न है, लेकिन मुझे लगता है कि यह बेहतर है कि वर्तमान में से कोई भी जवाब।

http://llvm.org/docs/ProgrammersManual.html#dss_smallstring

मूल रूप से यह तुम क्या चाहते है। बीटीडब्ल्यू tcmalloc मेरे (बुरी तरह से डिजाइन: डी) स्ट्रिंग आवंटन गहन कार्यक्रम 10% में perf वृद्धि हुई। इसके अलावा आपको यह साबित करने के लिए प्रोफाइल होना चाहिए कि ऑलॉक्स आपकी पीआरएफ समस्या है।

संबंधित मुद्दे