मैं उदाहरण के अनुसार दिखाने की कोशिश कर रहा हूं कि उपसर्ग वृद्धि पोस्टफिक्स वृद्धि से अधिक कुशल है।i ++ ++ i से कम कुशल, यह कैसे दिखाना है?
सिद्धांत में यह समझ में आता है: i ++ को अनियंत्रित मूल मान वापस करने में सक्षम होना चाहिए और इसलिए इसे स्टोर करना होगा, जबकि ++ मैं पिछले मान को संग्रहीत किए बिना वृद्धि मूल्य को वापस कर सकता हूं।
लेकिन क्या यह अभ्यास में यह दिखाने के लिए एक अच्छा उदाहरण है? फिर
gcc -Wa,-adhls -O0 myfile.cpp
मैं ऐसा किया, पोस्टफ़िक्स वेतन वृद्धि के साथ एक उपसर्ग वेतन वृद्धि करने के लिए बदल:
int array[100];
int main()
{
for(int i = 0; i < sizeof(array)/sizeof(*array); i++)
array[i] = 1;
}
मैं इस तरह जीसीसी 4.4.0 का उपयोग कर इसे संकलित:
मैं निम्नलिखित कोड की कोशिश की:
for(int i = 0; i < sizeof(array)/sizeof(*array); ++i)
परिणाम दोनों मामलों में समान असेंबली कोड है।
यह कुछ हद तक अप्रत्याशित था। ऐसा लगता है कि ऑप्टिमाइज़ेशन को बंद करके (-00) मुझे अवधारणा को दिखाने के लिए एक अंतर देखना चाहिए। मैं क्या खो रहा हूँ? क्या यह दिखाने के लिए एक बेहतर उदाहरण है? जबकि, उदा, का उपयोग
संकलक यह समझने के लिए पर्याप्त स्मार्ट है कि ++ i और i ++ आपके लूप-उदाहरण में एक ही परिणाम उत्पन्न करेंगे। वास्तव में इसे एक वैरिएबल को असाइन करके और इसके साथ कुछ कंप्यूटिंग करके परिणाम का उपयोग करने का प्रयास करें, जैसे सरणी अनुक्रमणिका या कुछ। लेकिन मुझे डर है कि आप नगण्य मतभेदों को देखने जा रहे हैं। –
वैसे: आकार (सरणी)/आकार (सरणी [0]) ... आकार (* सरणी) = आकार (int) – Artyom
ओह ... फिक्स्ड। धन्यवाद Artyom। – cschol