2010-08-11 7 views
9

यह व्यापक रूप से सामान्य ज्ञान में जाना जाता है, यह है कि ज्यादातर एल्गोरिदम, आवंटन और स्टैक पर डेटा deallocating के लिए बहुत तेजी से ढेर पर ऐसा करने से है। सी ++ में, कोड में अंतर हैढेर में डेटा की पहुँच के प्रदर्शन की तुलना और ढेर

तरह
double foo[n*n] 

बनाम

double* foo = new int[n*n] 

लेकिन वहाँ कोई महत्वपूर्ण मतभेद हैं, जब यह तक पहुँचने और डेटा के साथ की गणना करने के लिए आता है कि ढेर या पर पर या तो झूठ ढेर? अर्थात।

foo[i] 

कोड कई अलग-अलग आर्किटेक्चर पर चलाना चाहिए, इसलिए प्रयास करें और माप काम नहीं करेगा।

उत्तर

4

वहाँ (अत्यधिक प्रणाली निर्भर करता है) कैश इलाके के बारे में मुद्दों हो सकता है और पढ़ने/लिखने छूट जाए हो सकता है। आप और ढेर डेटा ढेर पर अपने कार्यक्रम चलाने, तो यह (अपने कैश वास्तुकला के आधार पर) है कि आप अधिक कैश छूट जाए में चलाने के लिए, यदि आप इसे ढेर में से एक निरंतर क्षेत्र पर पूरी तरह से चलाने की तुलना में बोधगम्य है। यहाँ एंड्रयू अपेल और झोंग शाओ जहां वे वास्तव में इस बात की जांच (एसएमएल/न्यू जर्सी से) द्वारा इस मुद्दे पर कागज, है क्योंकि ढेर/ढेर आवंटन कार्यात्मक भाषाओं के कार्यान्वयन के लिए एक विषय है:

http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.48.3778

उन्हें लिखने की यादों के साथ कुछ प्रदर्शन समस्याएं मिलीं लेकिन अनुमान लगाया गया कि इन्हें कैशिंग में प्रगति से हल किया जाएगा।

तो समकालीन डेस्कटॉप/सर्वर मशीन के लिए मेरा अनुमान यह है कि, जब तक कि आप अत्यधिक अनुकूलित नहीं हो रहे हैं, आर्किटेक्चर विशिष्ट कोड जो कैश लाइनों के साथ डेटा स्ट्रीम करता है, आपको स्टैक और ढेर एक्सेस के बीच कोई अंतर नहीं दिखाई देगा। चीजें छोटे कैश (जैसे एआरएम/एमआईपीएस नियंत्रक) वाले उपकरणों के लिए अलग हो सकती हैं, जहां कैश को अनदेखा कर सकते हैं वैसे भी ध्यान देने योग्य प्रदर्शन प्रभाव हो सकते हैं।

-1

आवंटन वर्जित, डेटा में है कि क्या यह stack- है या आधारित heap- तक पहुँचने के बीच कोई discernable अंतर होना चाहिए - यह दिन के अंत में सभी स्मृति है।

1

ढेर सीपीयू कैश में अक्सर होगा, ताकि कुछ (अधिकांश?) मामलों में तेज़ी से हो सके।

लेकिन सबसे सटीक जवाब शायद है: यह निर्भर करता है ...

1

एकल बयान के रूप में, इसका कोई फर्क नहीं पड़ता।
अधिक संदर्भ के बिना छोटे कहा जा सकता है। स्टैक के पक्ष में कुछ प्रभाव हैं जो लगभग हर समय नगण्य हैं।

  • स्टैक पहले से ही कैश में होने की संभावना है, तो ताजा आवंटित ढेर ब्लॉक संभवतः नहीं है। हालांकि, यह केवल पहला निष्पादन जुर्माना है।डेटा की बड़ी मात्राओं के लिए, आप कैश पिटाई चाहते हैं वैसे भी

  • ढेर आवंटन ही है, एक सा ढेर आवंटन की तुलना में सस्ता है, क्योंकि आवंटन सरल

  • दीर्घकालिक, एक ढेर के मुख्य समस्या आमतौर पर है विखंडन, एक "संचित लागत" है कि (आमतौर पर) एक आवंटन के लिए जिम्मेदार ठहराया जा सकता है, लेकिन काफी आगे आवंटन की लागत

इन प्रभावों को मापने वृद्धि हो सकती है कम से कम मुश्किल है।

सिफारिश: प्रदर्शन यहां निर्णायक नहीं है। पोर्टेबिलिटी और स्केलेबिलिटी सभी के लिए ढेर का उपयोग करने की सलाह देते हैं लेकिन बहुत कम मात्रा में डेटा।

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