तर्क के लिए, मतभेदों को हटाने वाले ऑप्टिमाइज़र के मामूली मामले को अनदेखा करते हैं। आइए यह भी कहें कि आप माइक्रोसॉफ्ट के इंटेल 64-बिट कॉलिंग कन्वेंशन (जो कि लिनक्स एबीआई से अलग हैं) का उपयोग कर रहे हैं, तो आपको स्टैक पर धक्का देने से पहले ऐसे मूल्यों को पारित करने के लिए आपके पास 4 64-बिट रजिस्ट्रार हैं। यह स्पष्ट रूप से बेहतर है।
32-बिट ऐप के लिए, मूल्य से और वे सीधे ढेर पर जाएंगे। संदर्भ के बजाय एक रजिस्टर में एक सूचक डाल सकते हैं (फिर से, स्टैक का उपयोग करने से पहले ऐसे कुछ रजिस्टर उपयोगों की अनुमति है)। हम इस कुछ स्थिरांक संदर्भ द्वारा मूल्य और f2 (101) द्वारा ग्राम ++ -O3 -S से उत्पादन, बुला f1 (99) में कर सकते हैं:
void f1(int64_t);
void f2(const int64_t&);
int main()
{
f1(99);
f2(101);
}
...
pushl 0
pushl $99
call _Z2f1x // by value - pushed two halves to stack
leal -8(%ebp), %eax
movl %eax, (%esp)
movl $101, -8(%ebp)
movl $0, -4(%ebp)
call _Z2f2RKx // by const& - ugly isn't it!?!
बुलाया समारोह तो सर्वप्रथम प्रयोग से पहले फिर से प्राप्त करने के लिए होता है (यदि कोई हो)। बुलाया गया फ़ंक्शन रजिस्टरों में पढ़ने वाले मानों को कैश करने के लिए स्वतंत्र है, इसलिए केवल एक बार इसकी आवश्यकता है। स्टैक दृष्टिकोण के साथ, मूल्य इच्छा पर फिर से पढ़ा जा सकता है, इसलिए रजिस्टर को उस मूल्य के लिए आरक्षित नहीं किया जाना चाहिए। सूचक दृष्टिकोण के साथ, या तो पॉइंटर या 64-बिट मान को कहीं और अधिक अनुमानित (जैसे धक्का, या एक और कम उपयोगी रजिस्टर) सहेजने की आवश्यकता हो सकती है, उस रजिस्टर को कुछ अन्य कार्यों के लिए क्षणिक रूप से मुक्त करने की आवश्यकता होनी चाहिए, लेकिन 64-बिट int पैरामीटर बाद में फिर से जरूरी है। सब कुछ, अनुमान लगाना मुश्किल है जो तेजी से है - सीपीयू/रजिस्टर-उपयोग/ऑप्टिमाइज़र/आदि निर्भर हो सकता है, और यह कोशिश करने लायक नहीं है।
pst की सलाह के लिए एक नोड ...
"दक्षता" :(KISS इसे पारित कैसे आप हर दूसरे खूनी पूर्णांक पास -।। Pst
... हालांकि, कभी कभी आप टेम्पलेट को KISS लागू मापदंडों और उन सब को स्थिरांक टी & भले ही कुछ रजिस्टरों में फिट हो सकता बनाने ....
स्रोत
2010-11-10 11:20:12
"दक्षता" :(KISS। आप इसे हर दूसरे खूनी पूर्णांक को कैसे पारित करते हैं। –
संकलक शायद इसे किसी भी तरह से अनुकूलित करेगा। –
@pst: मजेदार टिप्पणी के लिए +1। आदमी मैं बहुत कठिन हँसे। –