मान लें कि मूल पोस्टर में एक लूप था जिसे वे वास्तव में अनुकूलित करना चाहते थे - प्रत्येक निर्देश की गणना की गई। हम कैसे अनुभव कर सकते हैं - अनुभवजन्य - उसके प्रश्न का उत्तर?
जीसीसी कम से कम एक उपयोगी है, अगर असामान्य रूप से उपयोग किया जाने वाला स्विच, '-एस'। यह .c फ़ाइल के असेंबली कोड संस्करण को डंप करता है और ओपी पॉज़ जैसे प्रश्नों के उत्तर देने के लिए इसका उपयोग किया जा सकता है। मैं एक साधारण प्रोग्राम लिखा है:
int main()
{
int sum = 0;
for(int i=1;i<=10;++i)
{
sum = sum + i;
}
return sum;
}
और भाग गया: gcc -O0 -std=c99 -S main.c
, मुख्य कार्यक्रम के विधानसभा संस्करण बनाने।
movl $0, -8(%rbp)
movl $1, -4(%rbp)
jmp .L2
.L3:
movl -4(%rbp), %eax
addl %eax, -8(%rbp)
addl $1, -4(%rbp)
.L2:
cmpl $10, -4(%rbp)
jle .L3
आप यह पता लगाने की क्या हो रहा है एक विधानसभा विशेषज्ञ होने की जरूरत नहीं है: यहाँ (फुज्जी के कुछ हटाया के साथ) main.s की सामग्री है। movl चाल मानता है, addl चीजें जोड़ता है, cmpl तुलना करता है और जेले 'कम से कम कूद' के लिए खड़ा है, $ स्थिरांक के लिए है। यह 0 में कुछ लोड हो रहा है - यह 'योग' होना चाहिए, 1 किसी और चीज में - आह, 'मैं'! एल 2 पर कूद जहां हम 10 की तुलना करते हैं, जोड़ने के लिए एल 3 पर जाएं। फिर से तुलना के लिए एल 2 के माध्यम से गिरना। साफ! लूप के लिए ए।
बदलें कार्यक्रम के लिए:
int main()
{
int sum = 0;
int i=1;
for(;i<=10;++i)
{
sum = sum + i;
}
return sum;
}
को पुन: चलाएं जीसीसी और उसके एवज में विधानसभा बहुत समान हो जाएगा। रिकॉर्डिंग लाइन नंबरों के साथ कुछ सामान चल रहा है, इसलिए वे समान नहीं होंगे, लेकिन असेंबली एक जैसी होती है। अंतिम मामले के साथ एक ही परिणाम। तो, अनुकूलन के बिना भी, कोड बस इसके बारे में है।
मज़े के लिए, अनुकूलन को सक्षम करने और .s फ़ाइल को देखने के लिए '-O0' के बजाय '-O3' के साथ जीसीसी को दोबारा शुरू करें।
main:
movl $55, %eax
ret
जीसीसी केवल पता लगा नहीं हम पाश के लिए एक कर रहे थे, लेकिन यह भी महसूस किया कि यह चलाने के लिए समय की एक स्थिर संख्या संकलन समय पर हमारे लिए पाश किया था, बाहर chucked 'i' और 'योग' और जवाब को कोडित किया - 55! यह तेज़ है - हालांकि थोड़ा सा योगदान हुआ।
कहानी का नैतिक? अपना कोड साफ और अच्छी तरह से डिज़ाइन किया गया यह सुनिश्चित करने के लिए अपना समय व्यतीत करें। पठनीयता और रखरखाव के लिए कोड। पहाड़ी ओस और चीटोस पर रहने वाले लोग हमारे से अधिक चालाक हैं और हमारे लिए इन सरल अनुकूलन समस्याओं में से अधिकांश का ख्याल रखते हैं। मज़े करो!
इस तरह का सवाल वास्तव में एक बुरा संकेत है ... –
+1 यह पूछने के लिए, बस मिथक को – Andres