स्वीकार किए जाते हैं जवाब एक अच्छा एक है, लेकिन मैं जोड़ना चाहते थे:
function_that_takes_a_lot_of_time_to_compute()
या +[NSString stringWithFormat:]
दुष्प्रभाव हो सकते हैं, इसलिए भले ही हम 100% निश्चितता के साथ पता था कि nil_array
nil
था (और हम कभी-कभी स्थिर विश्लेषण के माध्यम से इसे जानते हैं), कार्यक्रम को अभी भी function_that_takes_a_lot_of_time_to_compute()
और +[NSString stringWithFormat:]
निष्पादित करना होगा ताकि यह सुनिश्चित किया जा सके कि यह अपेक्षाकृत व्यवहार कर रहा था।
यदि कोई फ़ंक्शन f()
का कोई साइड इफेक्ट नहीं है, तो इसे "शुद्ध" माना जाता है। इसका मतलब यह है कि यह इनपुट तर्क ले सकता है और एक मूल्य वापस कर सकता है, लेकिन यह कभी भी गैर-शुद्ध कार्यों को नहीं बुलाता है और कभी भी कार्यक्रम या वैश्विक स्मृति के किसी भी हिस्से को संशोधित नहीं करता है (तर्क पारित करने में शामिल स्मृति और वापसी मूल्य यहां गिनती नहीं है।) निम्नलिखित समारोह, उदाहरण के लिए, "शुद्ध" है:
int munge(float foo, char bar) {
unsigned short quux = bar << 4;
return foo + quux;
}
सी मानक पुस्तकालय के भीतर शुद्ध फ़ंक्शन के उदाहरण memcmp()
और strlen()
हैं।
हैं और केवल यदि एक समारोह शुद्ध होने के लिए जाना जाता है, संकलक सुरक्षित रूप से यह करने के लिए कॉल दूर का अनुकूलन कर सकता है, के बाद से नहीं बुला यह कार्यक्रम के बाकी पर कोई प्रभाव नहीं होगा। हालांकि, जीसीसी इसे करने के बारे में बहुत रूढ़िवादी है, और आम तौर पर (हमेशा?) केवल तभी होता है जब फ़ंक्शन शुद्ध चिह्नित होता है, __attribute__((__pure__))
फ़ंक्शन घोषणा पर सजावट के माध्यम से।
एक समारोह शुद्ध है, और इसके अलावा में कभी नहीं संकेत dereferences और कभी अपने ढेर फ्रेम से बाहर किसी भी स्मृति तक पहुँचता है, तो इसके बजाय जीसीसी, जो भी आगे स्थिर विश्लेषण और अनुकूलन की अनुमति देता है में __attribute__((__const__))
चिह्नित किया जा सकता।
स्रोत
2011-02-13 21:28:04
खुद को खोजने के लिए डीबगर से बहुत डरते हैं? :-) –
मैं इसे उत्तर देने जा रहा था क्योंकि मुझे यह दिलचस्प मामूली जानकारी मिली, लेकिन बोल्टक्लॉक ने मुझे मार दिया, इसलिए उन्हें अंक मिलते हैं (फिर भी मुझे उनके जवाब, आह, स्पैम फ़िल्टर स्वीकार करने के लिए 3 मिनट का इंतजार करना पड़ता है)। शब्दावली के लिए –