2008-09-07 16 views

उत्तर

41

एक कूद तालिका कार्यों के लिए संकेत के दोनों एक सरणी या मशीन कोड कूद निर्देश की एक सरणी हो सकता है। यदि आपके पास अपेक्षाकृत स्थिर कार्य हैं (जैसे सिस्टम कॉल या कक्षा के लिए वर्चुअल फ़ंक्शन) तो आप एक बार इस तालिका को बना सकते हैं और सरणी में एक साधारण अनुक्रमणिका का उपयोग करके फ़ंक्शंस को कॉल कर सकते हैं। इसका मतलब है कि पॉइंटर को पुनर्प्राप्त करना और फ़ंक्शन को कॉल करना या मशीन कोड पर कूदना तालिका के प्रकार के आधार पर कूदना होगा।

एम्बेडेड प्रोग्रामिंग में ऐसा करने का लाभ हैं:

  1. इंडेक्स अधिक स्मृति मशीन कोड या संकेत से कुशल हैं, तो वहाँ विवश वातावरण में स्मृति बचत के लिए एक संभावित है।
  2. किसी भी विशेष कार्य के लिए सूचकांक स्थिर रहेगा और फ़ंक्शन को बदलने के लिए केवल फ़ंक्शन पॉइंटर को स्वैप करने की आवश्यकता होगी।

यदि आपको तालिका तक पहुंचने के लिए प्रदर्शन का एक छोटा सा खर्च होता है, लेकिन यह किसी अन्य वर्चुअल फ़ंक्शन कॉल से भी बदतर नहीं है।

0

From Wikipedia:

कंप्यूटर प्रोग्रामिंग में, एक शाखा तालिका (कभी कभी एक कूद तालिका के रूप में जाना जाता है) एक और को कार्यक्रम नियंत्रण (शाखाओं) के हस्तांतरण की एक कुशल पद्धति का वर्णन शब्द का इस्तेमाल किया है किसी प्रोग्राम का हिस्सा (या एक अलग प्रोग्राम जो लोड हो सकता है) शाखा निर्देशों की एक तालिका का उपयोग कर गतिशील रूप से लोड हो सकता है। शाखा तालिका निर्माण आमतौर पर असेंबली भाषा में प्रोग्रामिंग का उपयोग किया जाता है लेकिन भी एक कंपाइलर द्वारा उत्पन्न किया जा सकता है।

एक शाखा तालिका बिना शर्त शाखा निर्देशों का एक धारावाहिक सूची का उपयोग कर में विभाजित किया जाता है के होते हैं एक गुणा अनुदेश लंबाई (स्मृति में बाइट की संख्या प्रत्येक शाखा के कब्जे से एक अनुक्रमिक सूचकांक द्वारा बनाई ऑफसेट अनुदेश)। ऐसा नहीं है कि शाखाओं के लिए मशीन कोड निर्देश एक निश्चित लंबाई है और अत्यंत कुशलता से सबसे हार्डवेयर द्वारा क्रियान्वित किया जा सकता तथ्य का उपयोग करता है, और सबसे अधिक काम आता कच्चे डेटा मानों हो सकता है के साथ काम कर आसानी से अनुक्रमिक में बदल जाती है सूचकांक मूल्य। इस तरह के डेटा को देखते हुए, शाखा तालिका अत्यंत कुशल हो सकती है; इसमें आमतौर पर निम्न चरणों का समावेश होता है: वैकल्पिक रूप से यह सुनिश्चित करने के लिए इनपुट डेटा स्वीकार्य है; डेटा को में शाखा तालिका में ऑफसेट में बदलना, यह आमतौर पर गुणा या को निर्देश की लंबाई को ध्यान में रखकर स्थानांतरित करना शामिल है; और पर तालिका और जेनरेट ऑफ़सेट के आधार से बना एक पता: में अक्सर प्रोग्राम काउंटर रजिस्टर पर ऑफ़सेट शामिल है।

1

एक कूद तालिका का वर्णन here है, लेकिन संक्षेप में, यह कुछ स्थितियों के आधार पर सीपीयू को कूदने के पते की एक श्रृंखला है। एक उदाहरण के रूप में, एक सी स्विच स्टेटमेंट को अक्सर एक जंप टेबल के रूप में लागू किया जाता है जहां प्रत्येक कूद प्रविष्टि किसी विशेष "केस" लेबल पर जाती है।

एम्बेडेड सिस्टम में, जहां स्मृति उपयोग प्रीमियम पर है, कई रचनाओं को अधिक मेमोरी-गहन विधियों (जैसे बड़े पैमाने पर अगर-अगर-अगर) की बजाय एक जंप टेबल का उपयोग करके बेहतर सेवा दी जाती है।

1

Wikipedia यह सार बहुत अच्छी तरह से:

कंप्यूटर प्रोग्रामिंग में, एक शाखा तालिका (कभी कभी एक कूद तालिका के रूप में जाना जाता है) एक शब्द कार्यक्रम नियंत्रण के हस्तांतरण की एक कुशल पद्धति का वर्णन किया जाता है (ब्रांचिंग) एक प्रोग्राम के भाग भाग (या एक अलग प्रोग्राम जो कि लोड हो सकता है) शाखा निर्देशों की एक तालिका का उपयोग कर गतिशील रूप से लोड हो सकता है)।शाखा तालिका निर्माण आमतौर पर असेंबली भाषा में प्रोग्रामिंग का उपयोग किया जाता है लेकिन भी एक कंपाइलर द्वारा उत्पन्न किया जा सकता है।

... शाखा टेबल और अन्य कच्चे डेटा एन्कोडिंग का उपयोग कंप्यूटिंग के प्रारंभिक दिनों में आम था जब स्मृति महंगा, सीपीयू धीमी थे और कॉम्पैक्ट डेटा प्रतिनिधित्व और विकल्प की कुशल विकल्प महत्वपूर्ण थे। आजकल, वे आमतौर पर एम्बेडेड प्रोग्रामिंग और ऑपरेटिंग सिस्टम विकास में उपयोग किए जाते हैं।

दूसरे शब्दों में, यह एक उपयोगी निर्माण है जब आपका सिस्टम बेहद मेमोरी और/या सीपीयू सीमित होता है, जैसा अक्सर एक एम्बेडेड प्लेटफ़ॉर्म में होता है।

0

जंप टेबल, जिसे अक्सर शाखा तालिका के रूप में जाना जाता है, आमतौर पर मशीन द्वारा उपयोग किया जाता है।

कंपाइलर एक असेंबली प्रोग्राम में सभी लेबलों की एक सूची बनाता है और सभी लेबल को स्मृति स्थान पर लिंक करता है। एक जंप टेबल काफी संदर्भ है जहां एक फ़ंक्शन या वेरिएबल या लेबल कभी भी हो सकता है, स्मृति में संग्रहीत किया जाता है।

तो एक फ़ंक्शन निष्पादित के रूप में, परिष्करण पर इसे वापस कूदता करने के लिए यह पिछले स्मृति स्थान है या अगले कार्य करने के लिए कूदता है, आदि

और यदि आपका मैं क्या लगता है कि आप कर रहे हैं के बारे में बात, तुम नहीं बस की जरूरत है उन्हें एम्बेडेड सिस्टम में लेकिन किसी भी प्रकार के संकलित/व्याख्या किए गए वातावरण में।

ब्रायन Gianforcaro

21

एक शाखा तालिका, जिसे शाखा तालिका के रूप में भी जाना जाता है, निर्देशों की एक श्रृंखला है, सभी बिना शर्त कोड कोड में किसी अन्य बिंदु पर शाखाबद्ध हैं।

आप एक स्विच के रूप में उनमें से लगता है कि कर सकते हैं (या चुनें) बयान जहां सभी मामलों भर रहे हैं: वहाँ कोई वापसी है

MyJump(int c) 
{ 
    switch(state) 
    { 
     case 0: 
     goto func0label; 
     case 1: 
     goto func1label; 
     case 2: 
     goto func2label; 
    } 
} 

ध्यान दें कि - कोड है कि यह कूदता वापसी निष्पादित करेंगे करने के लिए, और यह जहां भी myjump कहा जाता था वापस कूद जाएगा।

यह राज्य मशीनों के लिए उपयोगी है जहां आप राज्य चर के आधार पर कुछ कोड निष्पादित करते हैं। कई अन्य उपयोग हैं, लेकिन यह मुख्य उपयोगों में से एक है।

इसका उपयोग तब किया जाता है जहां आप ढेर के साथ झुकाव समय बर्बाद नहीं करना चाहते हैं, और कोड स्थान को सहेजना चाहते हैं। यह विशेष रूप से इंटरप्ट हैंडलर में उपयोग की जाती है जहां गति अत्यंत महत्वपूर्ण होती है, और परिधीय जो बाधा उत्पन्न करती है केवल एक चर द्वारा ज्ञात होती है। यह अवरोध नियंत्रकों के साथ प्रोसेसर में वेक्टर तालिका के समान है।

एक उपयोग $ 0.60 माइक्रोकंट्रोलर लेगा और वीडियो अनुप्रयोगों के लिए एक समग्र (टीवी) सिग्नल उत्पन्न करेगा। सूक्ष्म शक्तिशाली नहीं है - असल में यह केवल स्कैन लाइन लिखने के लिए पर्याप्त तेज़ है। पात्रों को आकर्षित करने के लिए एक कूद तालिका का उपयोग किया जाएगा, क्योंकि स्मृति से बिटमैप लोड करने में बहुत लंबा समय लगेगा, और बिटमैप को बाहर निकालने के लिए() लूप का उपयोग करें। इसके बजाय पत्र और स्कैन लाइन पर एक अलग कूद है, और फिर 8 या तो निर्देश जो वास्तव में सीधे पोर्ट को डेटा लिखते हैं।

-Adam

+2

यह मेरी समझ है कि स्विच मामलों वास्तव में कूद तालिकाओं में संकलित किया गया है था? यह एक अनावश्यक स्पष्टीकरण की तरह लगता है (कूदने वाली टेबल स्विच की तरह हैं जो कूद तालिकाओं की तरह हैं जो स्विच की तरह हैं ...) – ArtOfWarfare

0

कूद तालिकाओं (विशेष रूप से नहीं बल्कि) आमतौर पर कर रहे हैं उन्हें प्रेरित डेटा बनाने के लिए finite state machines में इस्तेमाल किया।

नेस्टेड स्विच करने के बजाय

/मामले

switch (state) 
    case A: 
     switch (event): 
     case e1: .... 
     case e2: .... 
    case B: 
     switch (event): 
     case e3: .... 
     case e1: .... 

आप एक 2d सरणी या समारोह संकेत कर सकते हैं और सिर्फ फोन handleEvent[state][event]