मैंने कई कार्यों से पहले fastcall
नोटेशन जोड़ा है। इसका उपयोग क्यों किया जाता है?विज़ुअल सी में उपयोग किए जाने वाले फास्टकॉल कीवर्ड क्या है?
उत्तर
फ़ंक्शन से पहले नोटेशन को "कॉलिंग कन्वेंशन" कहा जाता है। यह निर्दिष्ट करता है कि (निम्न स्तर पर) कंपाइलर फ़ंक्शन में इनपुट पैरामीटर पास करेगा और इसे निष्पादित होने के बाद इसके परिणाम पुनर्प्राप्त करेगा।
कई अलग-अलग कॉलिंग सम्मेलन हैं, सबसे लोकप्रिय stdcall
और cdecl
है।
आपको लगता है कि ऐसा करने का केवल एक ही तरीका है, लेकिन हकीकत में, कई तरीके हैं जिन्हें आप एक समारोह कह सकते हैं और वेरिएबल्स को पास और बाहर कर सकते हैं। आप इनपुट पैरामीटर को स्टैक पर रख सकते हैं (पुश, पुश, कॉल टू पुश; पॉप, पॉप, पॉप इनपुट इनपुट पैरामीटर पढ़ने के लिए)। या शायद आप उन्हें रजिस्टरों में चिपके रहेंगे (यह fastcall
है - यह गति के लिए रजिस्टरों में कुछ इनपुट पैरा को फिट करने का प्रयास करता है)।
लेकिन फिर आदेश के बारे में क्या? क्या आप उन्हें बाएं से दाएं या दाएं से बाएं धक्का देते हैं? नतीजे के बारे में क्या - हमेशा एक ही होता है (कोई संदर्भ पैरामीटर नहीं मानता है), तो क्या आप एक निश्चित स्मृति पते पर, रजिस्टर में, स्टैक पर परिणाम डालते हैं?
साथ ही, मान लीजिए कि आप संचार के लिए ढेर का उपयोग कर रहे हैं - काम करने के बाद वास्तव में स्टैक को साफ़ करना है - कॉलर या कैली?
बैक अप लेने और फिर (निश्चित) CPU रजिस्टरों की सामग्री को पुनर्स्थापित करने के बारे में क्या - क्या कॉलर इसे कर सकता है, या कैली गारंटी देगी कि यह सबकुछ वापस लौटाएगा?
सबसे लोकप्रिय कॉलिंग सम्मेलन (दूर तक) cdecl
है, जो सी और सी ++ दोनों में मानक कॉलिंग सम्मेलन है। WIN32 API stdcall
का उपयोग करता है, जिसका अर्थ है कि WIN32 API को कॉल करने वाले किसी भी कोड को उन फ़ंक्शन कॉल के लिए stdcall
का उपयोग करने की आवश्यकता है (इसे एक और लोकप्रिय पसंद बनाते हैं)।
fastcall
एक विषम गेंद है - लोगों को केवल एक इन/आउट पैरामीटर के साथ कई कार्यों के लिए एहसास हुआ है, मेमोरी-आधारित स्टैक से धक्का और पॉपिंग करना काफी अधिक है और फ़ंक्शन को थोड़ा भारी कहते हैं ताकि अलग-अलग कंपाइलर्स (अलग-अलग) कॉलिंग सम्मेलन पेश करते हैं जो बेहतर प्रदर्शन के लिए बाकी स्टैक में रखने से पहले रजिस्टरों में एक या अधिक पैरामीटर रखेंगे। समस्या यह है कि सभी कंपाइलर्स एक ही नियम का इस्तेमाल नहीं करते हैं, जहां fastcall
के साथ क्या होता है और परिणामस्वरूप आपको इसका उपयोग करते समय सावधान रहना पड़ता है क्योंकि आप कभी नहीं जानते कि कौन करता है। अंत में, fastcall
प्रदर्शन लाभ पर जानकारी के लिए Is fastcall really faster? देखें।
जटिल सामग्री।
ध्यान में रखना महत्वपूर्ण है: यदि आप बिल्कुल नहीं जानते हैं तो आप कॉलिंग सम्मेलनों को जोड़ या परिवर्तित नहीं करते हैं, क्योंकि यदि कॉलर और कैली दोनों कॉलिंग सम्मेलन पर सहमत नहीं हैं, आप शायद ढेर भ्रष्टाचार और एक segfault के साथ खत्म हो जाएगा।यह आमतौर पर तब होता है जब आपके पास एक डीएलएल/साझा लाइब्रेरी में फ़ंक्शन कहा जाता है और एक प्रोग्राम लिखा जाता है जो डीएलएल/एसओ/डाइलिब पर एक निश्चित कॉलिंग सम्मेलन (कहते हैं, cdecl
) पर निर्भर करता है, फिर लाइब्रेरी को एक अलग कॉलिंग के साथ दोबारा सम्मिलित किया जाता है सम्मेलन (कहें, fastcall
)। अब पुराना कार्यक्रम अब नई पुस्तकालय के साथ संवाद नहीं कर सकता है।
कन्वेंशनों fastcall हकदार मानकीकृत नहीं गया है, और अलग ढंग से लागू किया गया है, संकलक वेंडर के आधार पर। आम तौर पर फास्टकॉल कॉलिंग सम्मेलन रजिस्टरों में एक या एक से अधिक तर्क पारित करते हैं जो कॉल के लिए आवश्यक स्मृति पहुंच की संख्या को कम कर देता है।
- 1. डार्ट में उपयोग किए जाने वाले "कॉन्स्ट" कीवर्ड का क्या अर्थ है?
- 2. एक्सएसएलटी में उपयोग किए जाने वाले @ (एट) प्रतीक क्या है?
- 3. सी # में उपयोग की जाने वाली विधि कीवर्ड क्या है?
- 4. सी ++ में उपयोग किए जाने वाले सबसे छोटे एम्बेडेड ब्राउज़र क्या हैं?
- 5. सी # में सबसे व्यापक रूप से उपयोग किए जाने वाले लॉगिंग फ्रेमवर्क क्या हैं?
- 6. क्या पुनर्विक्रेता लॉक के माध्यम से उपयोग किए जाने वाले फ़ील्ड के लिए अस्थिर कीवर्ड आवश्यक है?
- 7. विज़ुअल सी #
- 8. फास्टकॉल वास्तव में तेज़ है?
- 9. WPF अनुप्रयोगों में उपयोग किए जाने वाले "कमजोर ईवेंट" पैटर्न क्या है?
- 10. जावा क्लास में उपयोग किए जाने वाले वेरिएबल शेडिंग क्या है?
- 11. क्या मिनिक्राफ्ट में उपयोग किए जाने वाले इस नमूना एल्गोरिदम का नाम है?
- 12. फेसबुक निर्मित तिथि में उपयोग किए जाने वाले समय प्रारूप का क्या समय है?
- 13. ऐप इंजन डेटास्टोर में उपयोग किए जाने वाले नामस्थान का क्या नाम है?
- 14. Reddit में उपयोग किए जाने वाले कैसंड्रा डेटाबेस स्कीमा क्या है?
- 15. क्या tcpClient में उपयोग किए जाने वाले स्थानीय पोर्ट को निर्दिष्ट करने का कोई तरीका है?
- 16. एएसपी.NET/IIS में उपयोग किए जाने वाले गैर मानक HTTP क्रिया "DEBUG" क्या है?
- 17. क्या सीवी पृष्ठभूमि के रूप में उपयोग किए जाने वाले एसवीजी के लिए एक पॉलीफिल है?
- 18. आपके द्वारा उपयोग किए जाने वाले सर्वोत्तम लॉग विश्लेषण टूल का क्या उपयोग है?
- 19. सी ++ में किसी विधि के साथ उपयोग किए जाने पर कॉन्स्ट ऑपरेटर का क्या अर्थ है?
- 20. सी # में अस्थिर कीवर्ड उद्देश्य क्या है?
- 21. "f() {}" जैसे बैश खोल स्क्रिप्ट फ़ंक्शन परिभाषा में उपयोग किए जाने वाले कोष्ठक क्या हैं? क्या यह "फ़ंक्शन" कीवर्ड का उपयोग करने से अलग है?
- 22. हेरेडोक: आमतौर पर उपयोग किए जाने वाले 'ईओटी' का क्या अर्थ है?
- 23. क्या पाइथन में सी ++ का उपयोग करने वाले कीवर्ड की तरह कुछ है?
- 24. उपयोग और "है" सी # में कीवर्ड
- 25. टेक्स्टमेट में उपयोग किए जाने वाले मानक प्रोग्रामिंग फ़ॉन्ट क्या हैं?
- 26. क्या मैं Django साइट पर उपयोग किए जाने वाले हास्केल में घटकों को लिख सकता हूं?
- 27. आज फर्मवेयर परीक्षण में उपयोग किए जाने वाले कुछ उपलब्ध सॉफ़्टवेयर टूल क्या हैं?
- 28. उद्देश्य-सी में, कथन विभाजक के रूप में उपयोग किए जाने पर अल्पविराम क्या करता है?
- 29. विज़ुअल सी ++
- 30. विज़ुअल सी ++
यह एक सी बात नहीं है, यह एक एमएसवीसी चीज है। –
सीएसपी – Mehrdad
के बिना एमएसवीसी का जादू नहीं कर सकता है जो भी इसे बंद करने के लिए मतदान करता है: यह वास्तविक सवाल नहीं है? हां, यह छोटा और बिंदु है, लेकिन यह निश्चित रूप से एक बहुत स्पष्ट उत्तर के साथ एक बहुत स्पष्ट सवाल है। –