यह प्रश्न SO पर एक बहुत ही शानदार रिसेप्शन था, इसलिए मैंने इसे वहां हटाने और इसके बजाय यहाँ प्रयास करने का निर्णय लिया। यदि आपको लगता है कि यह यहां भी फिट नहीं है, तो कृपया कम से कम सुझाव पर एक टिप्पणी छोड़ें कि मैं किस तरह का उदाहरण पा सकता हूं ...
क्या आप एक उदाहरण दे सकते हैं , जहां C99 VLAs का उपयोग कर वर्तमान मानक हीप-सी + + RAII तंत्रों का उपयोग करने से अधिक लाभ मिलता है?
उदाहरण के बाद मैं कर रहा हूँ:
- ढेर का उपयोग करके आसानी से मापने योग्य (10% हो सकता है) प्रदर्शन लाभ प्राप्त करें।
- अच्छा वर्कअराउंड नहीं है, जिसे पूरे ऐरे की जरूरत नहीं होगी।
- वास्तव में निर्धारित अधिकतम आकार के बजाय गतिशील आकार का उपयोग करने से लाभ होता है।
- सामान्य उपयोग परिदृश्य में स्टैक ओवरफ्लो का कारण बनने की संभावना नहीं है।
- C ++ प्रोजेक्ट में C99 स्रोत फ़ाइल को शामिल करने के लिए प्रदर्शन की आवश्यकता वाले डेवलपर को लुभाने के लिए पर्याप्त मजबूत होना चाहिए।
संदर्भ पर कुछ स्पष्टीकरण जोड़ना: मेरा मतलब है कि सीएलए द्वारा वीएलए का मतलब है और मानक सी ++ में शामिल नहीं है: int array[n]
जहां n
एक चर है। और मैं उपयोग के मामले के उदाहरण के बाद हूं जहां यह अन्य मानकों (C90, C ++ 11) द्वारा प्रस्तुत विकल्पों को रौंदता है:
int array[MAXSIZE]; // C stack array with compile time constant size
int *array = calloc(n, sizeof int); // C heap array with manual free
int *array = new int[n]; // C++ heap array with manual delete
std::unique_ptr<int[]> array(new int[n]); // C++ heap array with RAII
std::vector<int> array(n); // STL container with preallocated size
कुछ विचार:
- वैरगैस लेने वाले फ़ंक्शंस, जो स्वाभाविक रूप से आइटम काउंट को किसी उचित चीज़ तक सीमित करते हैं, फिर भी बिना किसी उपयोगी एपीआई-स्तरीय ऊपरी सीमा के होते हैं।
- पुनरावर्ती कार्य, जहां व्यर्थ स्टैक अवांछनीय है
- कई छोटे आवंटन और रिलीज, जहां ढेर ओवरहेड खराब होंगे।
- बहुआयामी सरणियों को संभालना (जैसे कि मनमाने ढंग से आकार के मैट्रिस), जहां प्रदर्शन महत्वपूर्ण है, और छोटे कार्यों के लिए बहुत अधिक उम्मीद की जाती है।
- टिप्पणी से: समवर्ती एल्गोरिथ्म, जहां हीप आवंटन में सिंक्रनाइज़ेशन ओवरहेड है ।
विकिपीडिया का एक उदाहरण है जो मेरे मानदंडों को पूरा नहीं करता है , क्योंकि ढेर का उपयोग करने का व्यावहारिक अंतर कम से कम बिना संदर्भ के अप्रासंगिक लगता है। यह गैर-आदर्श भी है, क्योंकि अधिक संदर्भ के बिना, ऐसा लगता है कि आइटम गणना बहुत अच्छी तरह से स्टैक ओवरफ्लो का कारण बन सकती है।
नोट: मैं विशेष रूप से एक उदाहरण कोड के बाद हूं, या एक एल्गोरिथ्म का सुझाव जो इस से लाभान्वित होगा, मेरे लिए उदाहरण स्वयं लागू करने के लिए।
alloca
, जो मुझे लगता है कि मूल रूप से एक ही बात है)। लेकिन यह बहुस्तरीय चीज़ अच्छी है, इसे शामिल करने के लिए संपादन प्रश्न!
malloc
व्यवहार सी मानक के अनुरूप है।
alloca()
वास्तव में बाहर निकल जाएगा । लेकिन यह एक वास्तविक खिंचाव है क्योंकि छोटे सरणियों को बस एक निश्चित आकार का उपयोग करना चाहिए, और बड़े सरणियों को संभवतः वैसे भी ढेर की आवश्यकता होगी।malloc()