में संदेश प्रेषण की लागत मैं विभिन्न परिस्थितियों में उद्देश्य-सी में संदेश प्रेषण की लागत के बारे में जानना चाहता हूं। विशेष रूप से मैं प्रोग्राम डिज़ाइन की अपनी पसंद का मार्गदर्शन करना चाहता हूं, इसलिए जब मैं एक बेहतर डिज़ाइन के लिए संदेश प्रेषण से बचकर समय-समय पर ऑप्टिमाइज़ करने का लुत्फ उठाता हूं। offsetX और offsetY:उद्देश्य-सी
मेरे वर्तमान परियोजना में एक मामला है कि मैं उदाहरण चर के साथ एक वर्ग है। मैं अक्सर पूर्ण ऑफसेट चाहते हैं और इस समय मैं हर जगह कोड की इस पंक्ति है: -
int absOffset = ((offsetX < 0.0) ? -offsetX : offsetX) +
((offsetY < 0.0) ? -offsetY : offsetY);
अब अगर इस C था ++ मैं एक इनलाइन समारोह है कि absOffset के लिए मान दिया पैदा करेगा। जावा/सी # में भी मैं इस तरह के एक समारोह को अंतिम/मुहरबंद के रूप में परिभाषित कर सकता हूं और यह सुनिश्चित कर सकता हूं कि यह रेखांकित किया जाएगा।
उद्देश्य-सी होगी: -
-(int)absOffset {
return ((offsetX < 0.0) ? -offsetX : offsetX) +
((offsetY < 0.0) ? -offsetY : offsetY);
}
और मैं इसे इतना की तरह कहेंगे: - अब
int ao = [self absOffset];
, संकलक कि इनलाइन करने में सक्षम है? मुझे लगता है कि यह कम से कम इसे सीधे फ़ंक्शन कॉल पर ठीक करने में सक्षम है और गतिशील संदेश प्रेषण से बचने में सक्षम है (मुझे लगता है) उद्देश्य-सी को इसके प्रकार की प्रणाली के कारण उपयोग करना चाहिए।
इसके अलावा, सामान्य रूप में, कितना करता उद्देश्य-सी में संदेश प्रेषण लागत? एक कंक्रीट वर्ग के लिए एक सूचक बनाम 'आईडी' के माध्यम से कॉल करते समय यह अलग होता है?
+1। यह ध्यान देने योग्य है कि संदेश कोड सभी उच्च-अनुकूलित असेंबली कोड में लिखा गया है, जो यहां स्थित है: http://opensource.apple.com/source/objc4/objc4-371.2/runtime/Messengers.subproj/ –
I ' मैं ओपे लागत के लिए माइक एश की संख्या में अपने सिर खरोंच कर रहा हूँ। मैंने सी ++ वर्चुअल कॉल ओवरहेड का एक समान माप चलाया, और 3.3 गीगाहर्ट्ज प्रोसेसर पर प्रत्येक आभासी अप्रत्यक्ष के लिए जो समय मिला, वह उसके 1. – Crashworks
की तुलना में 7ns की तरह था। पोस्ट किए गए लिंक के अनुसार वर्चुअल फ़ंक्शन कॉल 1.1ns लेता है जबकि एक उद्देश्य- सी प्रेषण 4 लेता है।9ns - जो लगभग 5x धीमी है। जैसे ही प्रेषक को बताया जाता है कि अभी भी सही परिस्थितियों में काफी हिट हो सकती है। मैं निश्चित रूप से समयपूर्व अनुकूलन से बचने के बारे में सहमत हूँ! – fbrereto