असेंबली का उपयोग करने के कुछ फायदे / नुकसान क्या हैं? [बन्द है]


15

मैं वर्तमान में दूरसंचार और इलेक्ट्रॉनिक्स में इंजीनियरिंग का अध्ययन कर रहा हूं और हम माइक्रोप्रोसेसर प्रोग्रामिंग में असेंबलर से सी में स्थानांतरित हो गए हैं। मुझे संदेह है कि यह एक अच्छा विचार है। असेंबली की तुलना में C के कुछ फायदे और नुकसान क्या हैं?

मेरे द्वारा देखे गए फायदे / नुकसान हैं:

लाभ:

  • मैं बता सकता हूँ कि सी सिंटैक्स असेंबलर सिंटैक्स की तुलना में सीखने में बहुत आसान है।
  • सी अधिक जटिल कार्यक्रम बनाने के लिए उपयोग करना आसान है।
  • लर्निंग सी किसी भी तरह से अधिक उत्पादक है सीखने के कारण असेंबलर की तुलना में सी के आसपास अधिक विकासशील सामान है।

नुकसान:

  • असेंबलर सी से कम स्तर की प्रोग्रामिंग भाषा है, इसलिए यह सीधे हार्डवेयर के लिए प्रोग्रामिंग के लिए अच्छा है।
  • मेमोरी, इंटरप्ट, माइक्रो-रजिस्टरों आदि के साथ काम करने के लिए बहुत अधिक लचीला है।

17
उह ... नई सदी में आपका स्वागत है। आप इसे यहाँ पसंद करेंगे। हम चल माइक्रोकंट्रोलर्स है नेट , जावा , लिनक्स , और यहां तक कि लोगों का उपयोग कर अजगर कार्यक्रम के लिए PICs
ZJR

@ZJR आप PIC को प्रोग्राम करने के लिए पायथन का उपयोग कैसे करते हैं? कौन सा चित्र?
जासूसी करते हैं

2
@ पूरी तरह से यह अजगर नहीं है, बस कोर का एक सबसेट। नियंत्रक कार्यक्षमता पर अजगर सिंटैक्स का एक कोट , यदि आप चाहें। पाइस्ट्रा पहला उदाहरण है जिसे मैंने वापस देखा है, लेकिन मुझे याद है कि एक दूसरे के डॉक्स को पढ़ा है, जो कि ATMEL भी करता है।
ZJR

4
ईमानदार होने के लिए, आधुनिक प्रोसेसर की जटिलता के साथ मुझे आश्चर्य होगा कि यदि कई प्रोग्रामर तंग लिख सकते हैं, तो एक आधुनिक सी कंपाइलर की तुलना में अधिक कुशल कोडर वैसे भी उत्पन्न कर सकता है। मैं उदाहरण के लिए कोडांतरक में ईपीआईसी आर्किटेक्चर सीपीयू प्रोग्राम करने की कोशिश करना पसंद करूंगा - मेल इटेनियम के साथ घर पर सही होगा । * 8 ')
मार्क बूथ

5
@ZJR यह नई सदी रोमांचक लग रही है! मैं उत्सुक हूँ, हालांकि, उन माइक्रोकंट्रोलर्स के लिए .NET रनटाइम, जावा वीएम और लिनक्स किस भाषा में लिखा गया था? जैसा कि, किस भाषा में वास्तविक माइक्रोकंट्रोलर प्रोग्रामिंग की गई थी? ओह ... इस सदी में सी या असेंबलर ...

जवाबों:


17

यहां कुछ स्टैक ओवरफ्लो उत्तर दिए गए हैं जो आपकी मदद कर सकते हैं (ये शीर्ष प्रतिक्रिया, स्वीकृत उत्तर हैं):

लाभ

/programming/143561/is-there-a-need-to-use-assembly-these-days (केवल 10K उपयोगकर्ताओं के लिए), या पुरालेख

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

नुकसान

/programming/2684364/why-arent-programs-written-in-assembly-more-often

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

उदाहरण

नीचे अंतिम पोस्ट एक स्टैक ओवरफ्लो पोस्ट है जो एक परिदृश्य को रेखांकित करता है जो एक विधानसभा उदाहरण दिखाएगा जो कि सी (जब समान फ़ंक्शन का प्रदर्शन कर रहा है) से तेज है।

/programming/577554/when-is-assembler-faster-than-c


20
  • सी, विधानसभा की तुलना में प्रोग्राम करना आसान है। वहाँ स्पष्ट कारण नहीं हैं rehashing के लायक है।

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

  • अक्सर बार, एक संकलक द्वारा उत्पन्न कोड उतना ही अच्छा होता है (गति और दक्षता के मामले में) हाथ से लिखे गए कोडांतरक के रूप में - यदि बेहतर नहीं है।

  • सी बहुत सुंदर है निम्न स्तर, और यह बहुत कम है कि आप बहुत कम जाना चाहते हैं। अमूर्त की एक अतिरिक्त परत होने से शायद ही कोई बुरी बात हो।

  • जब आपको कम जाने की आवश्यकता होती है, तो आप असेंबली का उपयोग कर सकते हैं, अन्यथा आप सी का उपयोग कर सकते हैं।

  • आप सी-कोड में असेंबली लिख सकते हैं, लेकिन असेंबली-कोड में सी नहीं।


6
मैं कहूंगा, कई बार आप देखेंगे कि सी कंपाइलर ऑप्टिमाइज्ड मशीन कोड आपके हाथ से लिखे असेंबली कोड से बेहतर है
उपयोगकर्ता

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

15

एसी प्रोग्राम को विभिन्न माइक्रोप्रोसेसर आर्किटेक्चर के लिए संकलित किया जा सकता है।


4

हम माइक्रोप्रोसेसर प्रोग्रामिंग में कोडांतरक से C में माइग्रेट कर चुके हैं। मुझे संदेह है कि यह एक अच्छा विचार है

डर नहीं, कोई भी अब 100% कोडांतरक में नए कार्यक्रम विकसित नहीं करता है। आजकल, C का उपयोग सबसे नन्हा, क्रैपीफेस्ट 8-बिट आर्किटेक्चर के लिए भी किया जा सकता है। हालांकि , कुछ असेंबलर को जानने से आप बेहतर सी प्रोग्रामर बन सकते हैं। इसके अलावा, प्रोग्राम में हमेशा कुछ छोटे विवरण या दो होते हैं जिन्हें कोडांतरक में लिखा जाना चाहिए।

मैं बता सकता हूँ कि सी सिंटैक्स असेंबलर सिंटैक्स की तुलना में सीखने में बहुत आसान है।

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

सी अधिक जटिल कार्यक्रम बनाने के लिए उपयोग करना आसान है।

दरअसल, सी मॉड्यूलर प्रोग्राम डिज़ाइन के लिए तंत्र प्रदान करता है, जैसे कि एनकैप्सुलेशन और स्थानीय स्कोप / स्थानीय चर। और सी में एक मानक पुस्तकालय है, साथ ही पिछले 30 वर्षों के दौरान संसाधनों की एक विशाल मात्रा भी लिखी गई है। और सबसे महत्वपूर्ण बात, सी पोर्टेबल है।

लर्निंग सी किसी भी तरह से अधिक उत्पादक है सीखने के कारण असेंबलर की तुलना में सी के आसपास अधिक विकासशील सामान है।

सी में पूर्व-निर्मित कार्यक्षमता, पुस्तकालय और संसाधन हैं, इसलिए पहिया का फिर से आविष्कार नहीं होगा। लेकिन इसके अलावा, आपका कथन व्यक्तिपरक है। मेरा मानना ​​है कि यह व्यक्तिगत प्राथमिकता का मामला है।

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

और "उत्पादक" के कई पहलू हैं। एक बहुत महत्वपूर्ण पहलू रखरखाव का समय है, और विशेष रूप से रखरखाव द्वारा प्रेरित बग को ठीक करने में लगने वाला समय। सी असेंबलर की तुलना में बनाए रखना कहीं अधिक आसान है।

असेंबलर सी से कम स्तर की प्रोग्रामिंग भाषा है, इसलिए यह सीधे हार्डवेयर के लिए प्रोग्रामिंग के लिए अच्छा है।

हार्डवेयर प्रोग्रामिंग को सीधे भाषा में किया जा सकता है। केवल वही चीजें जो आप C में नहीं कर सकते हैं वे स्टैक पॉइंटर्स और कंडीशन रजिस्टरों आदि तक पहुंच रहे हैं, स्वयं सीपीयू कोर की। इसलिए यदि हार्डवेयर प्रोग्रामिंग का मतलब है कि आप अपने स्वयं के सीपीयू के साथ बात कर रहे हैं, तो हाँ, कोडांतरक सी की तुलना में थोड़ा अधिक अनुमति देता है। यदि आप बाहरी हार्डवेयर तक पहुँचने का मतलब है, तो कोडांतरक सी पर कोई लाभ नहीं रखता है। लेकिन शायद नुकसान, क्योंकि यह लिखना अक्सर कठिन होता है। जेनेरिक सी कोड की तुलना में एक विशेष बाहरी उपकरण के लिए सामान्य कोडांतरक कोड।

मेमोरी, इंटरप्ट, माइक्रो-रजिस्टरों आदि के साथ काम करने के लिए बहुत अधिक लचीला है।

यह सही नहीं है। सी आपको वह सब भी करने की अनुमति देता है, हालांकि आपको कंपाइलर-विशिष्ट सी कोड पर निर्भर करना पड़ सकता है जैसे कि इंटरप्ट कीवर्ड।


अंत में, आपको C पर जोर देने के साथ MCUs को प्रोग्राम करने के लिए दोनों भाषाओं को जानना होगा।


किस तरह से पूरी सी भाषा कुछ अधिक रहस्यमय मशीन भाषाओं की तुलना में अधिक जटिल है? दोनों के बाद, मुझे लगता है कि पुस्तकालयों के बिना सी काफी कम जटिल है। यदि आप C मानक लाइब्रेरी की बात कर रहे हैं, तो आपको कुछ भी उपयोगी करने के लिए कोडांतरक में ऐसा कुछ चाहिए। C एक बड़ी और व्यापक भाषा हो सकती है, लेकिन आपको इसे समान स्तर पर जानने की आवश्यकता नहीं है। a = b[i] + c;लोड करने के लिए निर्देशों की तुलना में बहुत कम जटिल है b[i](जो अभिकलन लेता है) और cरजिस्टरों में (जो उपलब्ध कराया जाना चाहिए), जोड़ें, और स्टोर करें।
डेविड थॉर्नले

1
@DavidThornley जितना अधिक आप C के बारे में सीखते हैं, उतना ही आपको एहसास होता है कि यह कितना जटिल है। क्या आप जानते हैं कि अपरिभाषित / अनिर्दिष्ट / अंतर्निहित / परिभाषित व्यवहार के सभी सैकड़ों मामले? क्या आप सभी निहित प्रकार के पदोन्नति नियमों को विस्तार से जानते हैं (पूर्णांक पदोन्नति, सामान्य अंकगणितीय रूपांतरण)? सभी विशिष्ट नियम और प्रकार विनिर्देशक के बारे में वाक्य रचना? स्थैतिक / गतिशील बहुआयामी सरणियों के सभी विभिन्न प्रकार, सरणी बिंदुओं सहित (सरणी के 1 तत्व के संकेत के साथ भ्रमित नहीं होना) C99 और C11 की सभी विशेषताएं? और इसी तरह।

1
@ लुंडिन: सी के बारे में क्या महत्वपूर्ण है कि आप उन सभी प्रश्नों को पूछ सकें और ठोस उत्तर पा सकें। मानक के अनुरूप कंपाइलर को दस्तावेज के लिए आवश्यक है कि वे 62 ("सैकड़ों") कार्यान्वयन-परिभाषित व्यवहारों के लिए कैसे व्यवहार करें। असेंबली की सरासर सादगी इसे आपके अपने-अपने दोपहर के भोजन का प्रस्ताव बनाती है, जो सी को अपने कोड से संबंधित जटिलता को बंद कर देती है। मैं आपके तर्क का जवाब यह पूछकर दे सकता हूं कि किसी भी आर्किटेक्चर के लिए असेंबली में कितने फ्लोटिंग-पॉइंट लाइब्रेरी लिखे गए हैं और उनका व्यवहार कार्यान्वयन-परिभाषित क्यों है।
ब्लरफाल

1
@ लुंडिन: 62 जीसीसी मैनुअल के खंड 4 में सूचीबद्ध संकलक-परिभाषित व्यवहारों की संख्या है। विधानसभा के लिए कोई मानक पुस्तकालय नहीं है, क्योंकि एक सेब से सेब की तुलना के लिए लाइब्रेरी-डिफाइन क्या होता है, इसे छोड़कर। दस्तावेज़ की आवश्यकता §J.3 का पहला वाक्य है। CCC और C89 के अनुसमर्थन (Intel, Sun, IBM, Portland Group) दस्तावेज़ के बाद से खरीदे या उपयोग किए जाने वाले मुट्ठी भर व्यावसायिक कम्पाइलर, इसलिए आपके "सबसे" जो परेशान नहीं करते हैं वे खुद को अनुरूप नहीं कह सकते। मानकों की बात करें तो, एटी एंड टी सिंटैक्स के साथ असेंबलर पर इंटेल सिंटैक्स के साथ लिखे गए x86 के असेंबलिंग आपके लिए कैसे काम करते हैं?
ब्लरफ्ल

1
@ लुंडिन: मेरी कार महान, धन्यवाद। स्टीयरिंग व्हील, एक्सेलेरेटर, ब्रेक, क्लच और टर्न सिग्नल डंठल सभी मानक स्थानों पर हैं, मानक व्यवहार हैं और अन्य नियंत्रण सभी आईएसओ-मानक प्रतीकों के साथ स्पष्ट रूप से चिह्नित हैं। मनोरंजन प्रणाली, एचवीएसी, नौसेना, क्रूज नियंत्रण, आदि जैसे कार्यान्वयन-परिभाषित चीजों के सभी को दस्ताने बॉक्स में एक मोटी किताब में दर्ज किया गया है। असेंबली मेरी 1973 प्लायमाउथ की तरह है: इसमें बहुत कुछ नहीं था, लेकिन कच्चे रूप में यह कहीं भी उतना सक्षम नहीं था जितना मैं अब चला रहा हूं। विधानसभा उसी तरह है; आप जो भी इसमें जोड़ते हैं उसमें जटिलता आती है।
ब्लरफेल

1

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

पेशेवर बनाम सी बनाम एएसएम बहस, इसे सी में लिखने के लिए हमेशा उबालता है और एएसएम का उपयोग करता है जहां आप इसे सही ठहरा सकते हैं। और आप इसे सही ठहरा सकते हैं। एम्बेडेड दुनिया में प्रदर्शन और आकार है।

आपको इस चर्चा में लक्ष्य को शामिल करना है। हालांकि कई लोगों ने सी का उपयोग माइक्रोचिप के साथ किया है (पुरानी तस्वीरें, न कि pic32 जो कि कूल्हे हैं) एक बड़ी कीमत पर, यह संकलक, बहुत ही शैक्षिक और दिलचस्प निर्देश सेट लेकिन संकलक के लिए एक भयानक निर्देश सेट है। msp430, avr, बांह, अंगूठा, कूल्हे, सभी संकलक के लिए अच्छा है। 8051 भी खराब।

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

नीचे की रेखा, फिर से, C / asm दोनों को सीखें / सीखें, C से शुरू करें और asm का उपयोग करें जहाँ आप इसे सही ठहरा सकते हैं।


ये तर्क मेरे लिए पुराने जमाने के हैं। यदि आप एक आधुनिक संकलक का उपयोग कर रहे हैं जो पिछले 10 वर्षों में लिखा गया था, तो मेरा मानना ​​है कि आपके पास असेंबलर प्रोग्राम लिखने के लिए एक कठिन समय होगा जो कि सी प्रोग्राम की तुलना में काफी अधिक प्रभावी है। जब तक शायद, आप PIC या 8051 जैसे कुछ 30 साल पुराने डायनासोर वास्तुकला का उपयोग कर रहे हैं, तो आपके पास एक धीमी गति से चलने वाला कार्यक्रम होगा चाहे आप कुछ भी करें ...

यह सबसे आधुनिक gcc और llvm द्वारा उत्पन्न धीमी विधानसभा को ठीक करने के लिए काफी तुच्छ है। 4.x जीसीसी 3.x श्रृंखला की तुलना में धीमी, कम कुशल कोड का उत्पादन करता है (कुछ लक्ष्यों के लिए, कम से कम जिनका मैंने मूल्यांकन किया है, उदाहरण के लिए एआरएम)। मुझे लगता है कि इस धारणा को दूर करना महत्वपूर्ण है कि संकलक मनुष्यों की तुलना में बेहतर कर रहा है क्योंकि यह नहीं है। और यहां तक ​​कि जब यह करता है तो यह केवल तब करता है जब मानव जानता है कि वे क्या कर रहे हैं। "अपने उपकरणों को जानें" यदि आप उन्हें प्रभावी ढंग से उपयोग करना चाहते हैं। C से शुरू करें और जरूरत पड़ने पर ASM का उपयोग करें यदि आप इसे उचित ठहरा सकते हैं ...
old_timer

चूंकि gcc खुला स्रोत है, यह एक अजीब जानवर है। हो सकता है कि उस विशेष बंदरगाह को खराब तरीके से बनाया गया हो। सभी कोड अनुकूलन विशिष्ट प्लेटफ़ॉर्म के लिए किए जाने चाहिए, यह एक तुच्छ कार्य नहीं है। उस प्लेटफॉर्म के लिए कमर्शियल कंपाइलर बनाम मैनुअल असेम्बलर के प्रदर्शन की तुलना करना अधिक उचित होगा।

gcc मल्टी-टारगेट है इसलिए यह औसत रूप से बहुत अच्छा काम करता है लेकिन किसी विशेष लक्ष्य के लिए यह बहुत अच्छा काम नहीं है। और यही उम्मीद की जाती है। लेकिन एक आधुनिक संकलक, पिछले 10 वर्षों, आदि के बारे में आपकी बात, बस संकलक बेहतर नहीं हो रहे हैं, जहां तक ​​कोड का उत्पादन किया जाता है, वे उतना ही बेहतर हो रहा है जितना कि भाषाओं और लक्ष्यों और सुविधाओं के रूप में उत्पादित कोड की कीमत पर। यह धारणा कि कोई भी आधुनिक संकलक सर्वोत्तम कोड को संभव बनाता है, केवल झूठा है। बहुत सच है कि हाथ से कोडित कोडर की तुलना में औसतन बहुत बेहतर है,
अस

यही कारण है कि ज्यादातर लोग कहते हैं कि सी का उपयोग करें जब तक कोई समस्या नहीं है तो हाथ की समस्या को ठीक करें यदि आप इसे उचित ठहरा सकते हैं। क्या आपको वास्तव में उस छोटे से प्रदर्शन लाभ की आवश्यकता है, क्या यह वास्तव में जहां आपकी प्रदर्शन समस्या है, क्या आप इस कोड को उसी में बनाए रखना चाहते हैं, तो क्या आप प्रत्येक भविष्य के संकलक को यह देखने के लिए जारी रखेंगे कि क्या इसका आउटपुट मरम्मत करता है या आपकी समस्या कम करता है स्वीकार्य स्तर पर, आदि
old_timer

1

असेंबली के लिए कोड मेंटेनेंस और प्रदर्शन के बीच एक अपरिहार्य समझौता है। आप असेंबली को पढ़ने / बनाए रखने के लिए आसान लिख सकते हैं, या आप अत्यधिक अनुकूलित कोड लिख सकते हैं; लेकिन आप दोनों नहीं कर सकते।

सी के लिए, समझौता काफी गायब नहीं होता है, लेकिन यह बहुत कम ध्यान देने योग्य है - आप सी को पढ़ने / बनाए रखने के लिए आसान लिख सकते हैं जो यथोचित रूप से अनुकूलित है।

एक उत्कृष्ट असेंबली भाषा प्रोग्रामर लगभग हर समय कंपाइलर को पीटने में सक्षम होगा, लेकिन ज्यादातर समय वे जानबूझकर कोड को पढ़ने / बनाए रखने के लिए आसान लिखना पसंद करेंगे; और इसलिए एक उत्कृष्ट असेंबली भाषा प्रोग्रामर को अधिकांश समय एक कंपाइलर द्वारा पीटा जाएगा।

स्मार्ट तरीका विधानसभा और सी दोनों का उपयोग करना है (केवल विधानसभा या केवल सी के बजाय) - जैसे कोड के कुछ हिस्सों के लिए सी का उपयोग करें जहां एक उत्कृष्ट विधानसभा भाषा प्रोग्रामर को बनाए रखने योग्य / धीमा कोड लिखने के लिए चुना जाएगा, और विधानसभा के लिए उपयोग करें। शेष (जहां "अत्यधिक अनुकूलित और बनाए रखने के लिए कठिन" वास्तव में उचित है)।


-3
  1. प्रोग्रामिंग दक्षता के लिए अपेक्षाकृत अच्छा है।
  2. असेंबली का उपयोग करने के बजाय सी भाषा का उपयोग करना आसान है।
  3. सी भाषा विधानसभा भाषा की तुलना में काफी तेज हो सकती है।
  4. असेंबली को C कोड में लिखना संभव है लेकिन C को असेंबली कोड में नहीं।

3
केवल फायदे ....
किरण सपकाले

3
यह सिर्फ असेंबली का उपयोग करने के कुछ फायदे / नुकसान क्या हैं के ज्यादातर प्रतिरूपित संस्करण हैं ? ; आपने यहां चर्चा में कुछ नया नहीं जोड़ा।
मार्टिजन पीटरर्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.