एक सूचक को केवल उस मान तक पहुंचने से कम धीमा है? मुझे लगता है कि मेरा सवाल यह है कि - डिफरेंस ऑपरेटर कितना तेज़ है?सूचक सूचकांक दक्षता को कितना प्रभावित करता है?
उत्तर
एक सूचक संकेत के माध्यम से एक आधुनिक सीपीयू कैसे काम करता है, इस वजह से बहुत धीमी हो सकती है। लेकिन रनटाइम मेमोरी के साथ इसका कोई लेना-देना नहीं है।
इसके बजाए, गति भविष्यवाणी और कैश से प्रभावित होती है।
पूर्वानुमान आसान नहीं है जब सूचक बदल नहीं गया है या जब यह अनुमानित तरीकों से बदला जाता है (उदाहरण के लिए, लूप में चार द्वारा वृद्धि या कमी)। यह सीपीयू को वास्तविक कोड निष्पादन से पहले अनिवार्य रूप से चलाने की अनुमति देता है, पता लगाएं कि सूचक मूल्य क्या होगा, और उस पते को कैश में लोड करें। भविष्यवाणी असंभव हो जाती है जब सूचक मूल्य एक जटिल अभिव्यक्ति द्वारा बनाया गया है जैसे हैश फ़ंक्शन।
कैश खेल में आता है क्योंकि पॉइंटर स्मृति में इंगित कर सकता है जो कैश में नहीं है और इसे प्राप्त करना होगा। यदि पूर्वानुमान काम करता है तो यह कम हो जाता है लेकिन यदि भविष्यवाणी असंभव है तो सबसे खराब स्थिति में आप का दोहरा प्रभाव हो सकता है: सूचक कैश में नहीं है और पॉइंटर लक्ष्य कैश में नहीं है। उस सबसे बुरे मामले में सीपीयू दो बार रुक जाएगा।
यदि सूचक को फ़ंक्शन पॉइंटर के लिए उपयोग किया जाता है, तो CPU की शाखा पूर्वानुमानकर्ता खेल में आता है। सी ++ आभासी तालिकाओं में, फ़ंक्शन मान सभी स्थिर होते हैं और भविष्यवाणियों के पास यह आसान होता है। सीपीयू के पास कोड चलाने के लिए तैयार होगा और पाइपलाइन में जब अप्रत्यक्ष कूद के माध्यम से निष्पादन होता है। लेकिन, यदि यह एक अप्रत्याशित फ़ंक्शन पॉइंटर है तो प्रदर्शन प्रभाव भारी हो सकता है क्योंकि पाइपलाइन को फ्लश करने की आवश्यकता होगी जो प्रत्येक कूद के साथ 20-40 CPU चक्र को बर्बाद कर दे।
ठीक किया है, इसलिए यदि मेरे पास कुछ घोंसला वाले लूप हैं जो बफर का उपयोग करते हैं (हर बार जब यह बफर का उपयोग करता है तो यह इस एफएनसी में दो बार एक पॉइंटर को संदर्भित करता है), पॉइंटर मान (अनुमानित) अनुमानित हो सकता है? और यह वास्तव में कुल बात नहीं करेगा? – user965369
यदि बफर कैश में फ़िट होने के लिए काफी छोटा है, तो स्मृति एक्सेस बहुत तेज होगी चाहे वे पूर्वानुमानित हों या नहीं। – Nemo
@ user965369: यह सुनिश्चित करने के लिए अपनी पूरी कोशिश करें कि बफर L1 कैश में फिट बैठता है, यदि आप ऐसा नहीं कर सकते हैं, तो कम से कम इसे L2 कैश में फ़िट करें। अधिकतम गति प्रक्रिया के लिए कैश आकार के ब्लॉक में बड़े बफर। –
यह एक स्मृति का उपयोग अधिक की आवश्यकता है:
- सूचक चर
- में संग्रहीत पढ़ पते पर मूल्य
पढ़ यह 2 सरल ऑपरेशन के बराबर नहीं हो सकता है पता पढ़ , क्योंकि कैश में पहले से लोड नहीं किए गए पते तक पहुंचने के कारण इसे और अधिक समय की आवश्यकता हो सकती है।
इसके लिए * मेमोरी एक्सेस * अधिक, जो एक तंग पाश में निषिद्ध हो सकता है। सभी सीपीयू ऑपरेशंस बराबर नहीं बनाए जाते हैं। –
हाँ..तुम सही हो .. मैंने अपना जवाब – Heisenbug
ऐसा करता है। यह एक अतिरिक्त लाने की लागत है।
मूल्य द्वारा एक चर को एक्सेस करना, चर सीधे इसकी स्मृति स्थान से पढ़ा जाता है।
पॉइंटर के माध्यम से इसे एक्सेस करने से पॉइंटर से चर के पते को लाने और फिर उस स्मृति स्थान से मान पढ़ने का एक ओवरहेड जोड़ता है।
संभोग, यह मानते हुए कि चर एक रजिस्टर में नहीं रखा गया है, जो कि कुछ परिदृश्यों में तंग loops जैसे होगा। मेरा मानना है कि प्रश्न इस तरह के परिदृश्यों को मानने वाले उपरांत का जवाब मांगता है।
की तरह सामान पर निर्भर करता है:
- कि क्या "सीधे पहुँचा" मूल्य पहले से ही एक रजिस्टर में है, या ढेरों पर
- (वह भी एक सूचक अविवेक है) लक्ष्य पता पहले से ही कैश में है कि क्या
- कैश वास्तुकला, बस वास्तुकला आदि
यानी, भी कई चर उपयोगी यह संख्या कम बिना के बारे में अटकलें लगाना।
यदि आप वास्तव में जानना चाहते हैं, तो इसे अपने विशिष्ट हार्डवेयर पर बेंचमार्क करें।
मान लीजिए कि आप एक असली सूचक (किसी प्रकार का स्मार्ट पॉइंटर नहीं) से निपट रहे हैं, तो डिफरेंस ऑपरेशन (डेटा) मेमोरी का उपभोग नहीं करता है। यह (संभावित रूप से) एक अतिरिक्त मेमोरी संदर्भ शामिल करता है हालांकि: पॉइंटर द्वारा इंगित डेटा तक पहुंचने के लिए दूसरा पॉइंटर लोड करता है।
यदि आप एक तंग पाश में एक सूचक का उपयोग कर रहे हैं, हालांकि, यह आमतौर पर अवधि के लिए एक रजिस्टर में लोड हो जाएगा। इस मामले में, लागत अधिकतर अतिरिक्त दबाव दबाव के मामले में होती है (यानी, यदि आप उस सूचक को स्टोर करने के लिए एक रजिस्टर का उपयोग करते हैं, तो आप इसे एक ही समय में कुछ और स्टोर करने के लिए उपयोग नहीं कर सकते हैं)। यदि आपके पास एक एल्गोरिदम है जो अन्यथा ठीक रजिस्टरों को भर देगा, लेकिन एक पॉइंटर को अपग्रेड करने के साथ स्मृति में बह जाएगा, इससे कोई फर्क पड़ सकता है। एक समय में, यह एक बहुत बड़ा नुकसान था, लेकिन अधिकांश आधुनिक CPUs (अधिक रजिस्टरों और ऑन-बोर्ड कैश के साथ) जो शायद ही कभी एक बड़ा मुद्दा है। स्पष्ट अपवाद कम रजिस्ट्रार और कोई कैश (और ऑन-चिप मेमोरी के बिना) के साथ एक एम्बेडेड सीपीयू होगा।
नीचे की रेखा यह है कि यह आमतौर पर बहुत नगण्य है, अक्सर थ्रेसहोल्ड के नीचे जहां आप इसे भी माप सकते हैं।
- 1. शून्य सूचक का कितना मेमोरी उपयोग करता है?
- 2. गैर-सूचक सूचकांक के बराबर क्या है?
- 3. सक्रियरण रेलवे को प्रभावित करता है ')() की क्षमताओं को कैसे प्रभावित करता है?
- 4. क्या obfuscation प्रदर्शन को प्रभावित करता है?
- 5. फेविकॉन 404 प्रदर्शन को प्रभावित करता है
- 6. ऑब्जेक्ट.ब्सर्व() प्रदर्शन को कैसे प्रभावित करता है?
- 7. रेखा-ऊंचाई छवियों को प्रभावित करता है?
- 8. क्या तालिका का आकार INSERT प्रदर्शन को प्रभावित करता है?
- 9. दस्तावेज़ -elementFromPoint सूचक-घटनाओं से प्रभावित क्यों है: कोई नहीं?
- 10. डिफ़ॉल्ट विनाशक कितना करता है
- 11. एएसपीनेट पुनरावर्तक वर्तमान सूचकांक, सूचक, या काउंटर
- 12. बिट एंडियननेस बिट बिट शिफ्ट को कैसे प्रभावित करता है और सी में फ़ाइल IO को प्रभावित करता है?
- 13. सी - एक सूचकांक में एक सूचक में एक सूचक को कैसे परिवर्तित करें?
- 14. सूचकांक के लिए सूचक और सामान्य सूचक मिश्रित किया जा सकता है?
- 15. कोडिंग दक्षता और समग्र दक्षता
- 16. क्या समय बीजिनपीरियड एपीआई सिस्टम घड़ी को प्रभावित करता है?
- 17. क्या ब्रैकेट प्लेसमेंट पठनीयता को प्रभावित करता है?
- 18. NUMA आर्किटेक्चर ActivePivot के प्रदर्शन को कैसे प्रभावित करता है?
- 19. स्रोत फ़ाइल का नाम संकलन को क्यों प्रभावित करता है?
- 20. क्रोट गतिशील लिंकिंग को कैसे प्रभावित करता है?
- 21. क्या स्पष्ट फ़ाइल नाम एसईओ को प्रभावित करता है?
- 22. यूलाबेल परत कोनेडियस नकारात्मक प्रभाव को प्रभावित करता है
- 23. अलावा की दशमलव के क्रम को प्रभावित करता है परिणाम
- 24. मिक्स्डिन का क्रम व्युत्पन्न वर्ग को कैसे प्रभावित करता है?
- 25. {} PHP में एक MySQL क्वेरी को कैसे प्रभावित करता है?
- 26. एक बड़ा लेनदेन लॉग प्रदर्शन को कैसे प्रभावित करता है?
- 27. एसक्यूएल सर्वर - ट्रिगर @@ रोकाउंट को प्रभावित करता है?
- 28. सीएसएस स्केल ट्रांसफॉर्म कैसे दस्तावेज़ प्रवाह को प्रभावित करता है?
- 29. क्या MySQL foreign_key_checks पूरे डेटाबेस को प्रभावित करता है?
- 30. क्या कचरा संग्रह कभी ढेर को प्रभावित करता है?
क्या यह गति या स्मृति है जिसके बारे में आप चिंतित हैं? – ruslik
क्या आपका प्रश्न गति या स्मृति के बारे में है? –
सामान्य रूप से जवाब देने के लिए असंभव। एल 1 कैश में हिट करने वाली मेमोरी एक्सेस सैकड़ों (संभवतः हजारों) से अधिक तेज होगी जो वास्तविक रैम तक पहुंचनी होगी। अटकलें मत करो; बेंचमार्क। – Nemo