क्या कोई यह समझा सकता है कि वे क्या हैं और मुझे उनकी आवश्यकता क्यों होगी? अगर मुझे इंट्रिनिक्स का उपयोग करने की ज़रूरत है तो मैं किस प्रकार के अनुप्रयोगों का निर्माण कर रहा हूं?इंट्रिनिक्स क्या हैं?
उत्तर
आम तौर पर, "अंतर्निहित" उन कार्यों को संदर्भित करता है जो अंतर्निहित हैं - यानी अधिकांश मानक लाइब्रेरी फ़ंक्शन जो संकलक लाइब्रेरी में वास्तविक फ़ंक्शन को कॉल करने के बजाय इनलाइन उत्पन्न कर सकते हैं/उत्पन्न करेंगे। उदाहरण के लिए, जैसा कॉल: इस तरह
mov ecx, 10
xor eax, eax
mov edi, offset FLAT:array1
rep stosb
intrinsics कर रहे हैं विशुद्ध रूप से एक अनुकूलन: memset(array1, 10, 0)
एक x86 के लिए की तरह कुछ के रूप में संकलित किया जा सकता है। इंट्रिनिक्स की "आवश्यकता" सबसे अधिक संभावना है जहां संकलक इंट्रिनिक्स का समर्थन करता है जो आपको कोड उत्पन्न करने देता है जो संकलक सीधे उत्पन्न नहीं कर सकता (या आमतौर पर नहीं)। एक स्पष्ट उदाहरण के लिए, x86 के लिए कुछ कंपेलरों में "एमएमएक्स इंट्रिनिक्स" है जो आपको "फ़ंक्शंस" का उपयोग करने देता है जो वास्तव में एमएमएक्स निर्देशों का प्रत्यक्ष प्रतिनिधित्व है।
इंट्रिनिक्स को संकलक द्वारा उन कार्यों के रूप में उजागर किया जाता है जो किसी भी लाइब्रेरी का हिस्सा नहीं हैं, प्रति से।
जिन लोगों का आप शायद सबसे अधिक उपयोग करते हैं वे असेंबली इंट्रिनिक्स हैं जिन्हें संकलक द्वारा सटीक मशीन निर्देश के रूप में माना जाता है। आप उनका उपयोग करेंगे, उदाहरण के लिए, कोड में जहां आपको एक विशिष्ट CPU निर्देश का लाभ उठाने की आवश्यकता होती है जिसे संकलक स्वचालित रूप से उत्पन्न नहीं करता है, और जहां आपको जरूरी नहीं कि एक पूर्ण इनलाइन असेंबली अनुभाग की आवश्यकता हो।
उपयोग केस: सिमड निर्देश सेट (एसएसई, अल्टीवेक, नियॉन) जहां कंपेलरों के लिए यह पता लगाना कठिन होता है कि उन्हें कहां उपयोग करना है, लेकिन पंजीकरण आवंटन/स्टैक फ्रेम प्रबंधन को असेंबलर के विरोध में सी में कोडिंग से अभी भी प्राप्त किया जा सकता है –
एक आंतरिक कार्य एक ऐसा फ़ंक्शन है जो फ़ंक्शन के लाइब्रेरी-प्रदान किए गए कार्यान्वयन को जोड़ने के बजाय, जब संभव हो तो संकलक सीधे लागू होता है।
एक आम उदाहरण strncpy()
है।
लघु तारों के लिए, strncpy()
पर फ़ंक्शन कॉल करने के लिए, जिसमें रिटर्न एड्रेस के साथ 'स्टैक फ्रेम' सेट करना शामिल है, बाइट्स की वास्तविक प्रतिलिपि की तुलना में अधिक समय का उपभोग करेगा। इससे भी बदतर, सीपीयू प्री-फ़ेच बफर पर प्रभाव कई घड़ी चक्रों के लिए CPU निष्पादन को रोक देगा।
इसके बजाय, आंतरिक फ़ंक्शन को फ़ंक्शन कॉल के बदले कंपाइलर द्वारा कार्यान्वित किया जाता है। strncpy()
के उदाहरण में, बाइट-कॉपीिंग कोड सीधे उस स्थान पर उत्सर्जित होता है जहां strncpy()
आक्रमण किया जाता है।
इस strncpy()
उदाहरण के समान, प्रत्येक अंतर्निहित फ़ंक्शन को सीधे बाधाओं के पूरा होने पर ऑनलाइन कोड के रूप में लागू किया जाता है।
आंतरिक फ़ंक्शन की एक गैर-आंतरिक प्रतिलिपि आमतौर पर मानक लाइब्रेरी में मौजूद होती है, यदि फ़ंक्शन के पते की आवश्यकता होती है।
इनलाइन फ़ंक्शंस की तुलना में, आंतरिक फ़ंक्शन कंपाइलर द्वारा प्रदान किया जाता है। सी प्रोग्राम के स्रोत कोड में कोई स्थान नहीं है जहां आंतरिक कार्य लिखा गया है, न ही वहां एक लाइब्रेरी कार्यान्वयन है जिसे लिंक किया जाना चाहिए। एक इनलाइन फ़ंक्शन अलग है जिसमें संकलक इनलाइन फ़ंक्शन के लिए स्रोत कोड पढ़ता है, लेकिन बाद में यह समान होता है कि यह इनलाइन फ़ंक्शन का संकलित अनुवाद सीधे ऑब्जेक्ट कोड में छोड़ सकता है, फ़ंक्शन कॉल के ओवरहेड को छोड़कर।
संक्षेप में, एक आंतरिक funciton और एक इनलाइन फ़ंक्शन के बीच व्यावहारिक अंतर यह है कि आंतरिक कार्य "वर्तमान" हैं, भले ही आपके पास #include
आवश्यक हेडर फ़ाइल नहीं है जिसमें फ़ंक्शन घोषणा शामिल है।इनलाइन फ़ंक्शन के लिए, फ़ंक्शन घोषणा के साथ हेडर फ़ाइल #include
'डी (या अन्यथा घोषित) होनी चाहिए।
'इंट्रिनिक्स' 'ऐसी भाषा की विशेषताएं हैं जो एक कंपाइलर प्रोग्राम घोषित करने के लिए किसी भी आवश्यकता के बिना पहचान और लागू करता है। संकलक करने के लिए संकलक एक रनटाइम लाइब्रेरी से लिंक कर सकता है या नहीं। C++ में उदाहरण के लिए, संरचना प्रतिलिपि आपरेशन निहित है:
struct {
int a;
char b [100];
long c [27];
} s, t;
...
s = t; // this statement copies hundreds of bytes, likely with a rtl call
अन्य उदाहरण फोरट्रान जैसी भाषाओं जटिल प्रकार के लिए अंतर्निहित समर्थन, और ट्रान्सेंडैंटल (साइन, स्पर्श, आदि) है जहां शामिल कार्यों नहीं- जरूरत और घोषित नहीं किया जा सकता है। PHP, जावास्क्रिप्ट, रूबी इत्यादि में सैकड़ों आंतरिक कार्य हैं जैसे कि सरणी बनाने और खोजने, नियमित अभिव्यक्ति मिलान आदि इत्यादि।
आपके अन्य प्रश्नों के लिए, केवल अंतर यह है कि उन्हें होना चाहिए की घोषणा की। उदाहरण के लिए, एक सी ++ प्रोग्राम ट्रान्सेंडैंटल कार्यों का उपयोग कर गणित पुस्तकालय घोषणाओं में शामिल करना होगा:
#include <math.h>
वहाँ अनुप्रयोगों जो intrinsics पर निर्भर का कोई खास पैटर्न है, यह संकलक लेखकों और प्रोग्रामर के लिए महत्व का मामला है।
- 1. एसएसई इंट्रिनिक्स
- 2. एसएसई, इंट्रिनिक्स, और संरेखण
- 3. एआरएम नियॉन इंट्रिनिक्स
- 4. नियॉन एसएसई इंट्रिनिक्स के समतुल्य
- 5. लॉजिकल एसएसई इंट्रिनिक्स के बीच क्या अंतर है?
- 6. क्या एआरएम नियॉन इंट्रिनिक्स के लिए कोई अच्छा संदर्भ है?
- 7. इंटेल एवीएक्स इंट्रिनिक्स: कोई संगतता लाइब्रेरी बाहर?
- 8. जीसीसी, सिमड इंट्रिनिक्स और फास्ट-गणित अवधारणाएं
- 9. एसएसई 2 इंट्रिनिक्स और जीसीसी इनलाइन असेंबलर
- 10. इस जीसीसी कोड के बराबर पाने के लिए एमएसवीसी इंट्रिनिक्स का उपयोग कैसे करें?
- 11. मैं एआरएम नियॉन इंट्रिनिक्स का उपयोग कर वेक्टर डेटा को पुन: व्यवस्थित कैसे करूं?
- 12. एसएसई इंट्रिनिक्स के साथ गैर-संगत मेमोरी लोकेशन में मूल्यों को कैसे स्टोर करें?
- 13. मैक पर एईएस-एनआई इंट्रिनिक्स का उपयोग कैसे कर सकता हूं?
- 14. एआरएम कॉर्टेक्स-ए 8 में गुणा और संचित इंट्रिनिक्स का उपयोग कैसे करें?
- 15. एसएसई इंट्रिनिक्स सामान्य फ्लोट ऑपरेशन को वापस लौटने का कारण बनता है -1। # आईएनवी
- 16. एसएसई के बजाय एवीएक्स इंट्रिनिक्स का उपयोग गति में सुधार नहीं करता है - क्यों?
- 17. क्या कर सकते हैं कि sed क्या कर सकते हैं?
- 18. क्या फोरट्रान कंपाइलर्स हैं?
- 19. कॉलबैक विधियां क्या हैं?
- 20. निजी एपीआई क्या हैं
- 21. नामित पाइप क्या हैं?
- 22. वायदा क्या हैं?
- 23. डेटा ब्रेकपॉइंट्स क्या हैं?
- 24. jQuery valHooks क्या हैं?
- 25. एनडीएफ फाइलें क्या हैं?
- 26. इटरेटर, सी ++ क्या हैं?
- 27. भौतिक विचार क्या हैं?
- 28. एससीरीआई इटरेटर्स क्या हैं?
- 29. स्टैकेबल संशोधनों क्या हैं?
- 30. एफटीएल फाइलें क्या हैं
http://en.wikipedia.org/wiki/Intrinsic_function – sellibitze