पर फ़ंक्शन की सरणी का प्रदर्शन कोड के एक बहुत ही महत्वपूर्ण महत्वपूर्ण भाग को लिख रहा हूं और मुझे फ़ंक्शन पॉइंटर्स की सरणी के साथ केस स्टेटमेंट (या अगर कथन) को प्रतिस्थापित करने के बारे में यह पागल विचार था।यदि कथन कथन
मुझे प्रदर्शित करने दें; यहाँ सामान्य संस्करण है:
while(statement)
{
/* 'option' changes on every iteration */
switch(option)
{
case 0: /* simple task */ break;
case 1: /* simple task */ break;
case 2: /* simple task */ break;
case 3: /* simple task */ break;
}
}
और यहाँ "कॉलबैक फ़ंक्शन" संस्करण है:
void task0(void) {
/* simple task */
}
void task1(void) {
/* simple task */
}
void task2(void) {
/* simple task */
}
void task3(void) {
/* simple task */
}
void (*task[4]) (void);
task[0] = task0;
task[1] = task1;
task[2] = task2;
task[3] = task3;
while(statement)
{
/* 'option' changes on every iteration */
/* and now we call the function with 'case' number */
(*task[option])();
}
तो कौन-सा संस्करण तेजी से हो जाएगा? क्या फ़ंक्शन का ओवरहेड सामान्य स्विच (या यदि) कथन पर गति लाभ को समाप्त करता है?
बाद वाले संस्करण का आकलन इतना पठनीय नहीं है लेकिन मैं जो गति प्राप्त कर सकता हूं उसे ढूंढ रहा हूं।
जब मैं चीज़ों को स्थापित करता हूं तो मैं इसे बेंचमार्क करने वाला हूं लेकिन अगर किसी के पास पहले से कोई जवाब है, तो मैं परेशान नहीं हूं।
मेरा अनुमान स्विच तेजी से हो जाएगा - कोई फ़ंक्शन कॉल, कम कैश छूट जाए। लेकिन, इसका परीक्षण करें, हमेशा के रूप में कारण * यह निर्भर करता है *। – Erik
मुझे नहीं लगता कि यह अधिक (यदि कोई हो) अंतर होगा। उस ने कहा, क्या आपने उन्हें देखने की कोशिश की है कि कौन सा तेज़ है? – abeln
जब तक आपके कार्य फ़ंक्शंस __tiny__ नहीं हैं तो कुछ निर्देशों को किसी भी तरह से नगण्य अंतर बनाना चाहिए। –