stackalloc
कीवर्ड प्रदान करता है जो कार्यक्षमता प्रदान करता है? मैं कब और क्यों इसका उपयोग करना चाहूंगा?मुझे C# में stackalloc कीवर्ड का उपयोग करने की आवश्यकता कब होगी?
उत्तर
MSDN से:
ढेर पर स्मृति का एक ब्लॉक आवंटित करने के लिए एक असुरक्षित कोड संदर्भ में प्रयोग किया जाता है।
सी # की मुख्य विशेषताओं में से एक यह है कि आप सामान्य रूप से नहीं सीधे स्मृति का उपयोग करने के लिए, जैसा कि आप सी में करना होगा/C++ malloc
या new
का उपयोग कर की जरूरत है। हालांकि, अगर आप वास्तव में कुछ स्मृति को स्पष्ट रूप से आवंटित करना चाहते हैं, लेकिन सी # इस "असुरक्षित" को मानता है, तो आप केवल unsafe
सेटिंग के साथ संकलित कर सकते हैं। stackalloc
आपको ऐसी स्मृति आवंटित करने की अनुमति देता है।
आप लगभग निश्चित रूप से लिखने के लिए इसका इस्तेमाल करने की जरूरत नहीं है कोड में कामयाब रहे। यह संभव है कि कुछ मामलों में आप तेजी से कोड लिख सकते हैं यदि आप सीधे मेमोरी एक्सेस करते हैं - यह मूल रूप से आपको पॉइंटर मैनिपुलेशन का उपयोग करने की अनुमति देता है जो कुछ समस्याओं के अनुरूप है। जब तक आपके पास कोई विशिष्ट समस्या न हो और असुरक्षित कोड एकमात्र समाधान है तो आप शायद कभी इसकी आवश्यकता नहीं होगी।
स्टैक ओवरव्लो बनाया गया है ताकि इंटरनेट पर जो लोग खोज करते हैं उन्हें यहां जवाब मिलेगा (इसे पहले पूछना है)। – TheTXI
दुर्भाग्य से आपने बहुत कठोर किया :) शायद यह व्यक्ति ढेर बनाम ढेर पर स्मृति आवंटित करने के बीच अंतर को समझ में नहीं आता है। आपका जवाब स्पष्ट और अनिश्चित था। –
एडम, मैं जरूरी नहीं सहमत हूं। वह * शायद * अपने प्रश्न को अलग-अलग वाक्यांशित कर देगा, उदाहरण के लिए 'मुझे स्टैकलोक कीवर्ड का उपयोग कब करना होगा?'। – Razzie
http://msdn.microsoft.com/en-us/library/cx9s2sy4.aspx
इस कीवर्ड असुरक्षित स्मृति में गड़बड़ी के साथ काम किया जाता है। इसका उपयोग करके, आपके पास पॉइंटर (सी/सी ++ में एक शक्तिशाली और दर्दनाक सुविधा) का उपयोग करने की क्षमता है
stackalloc
स्टैक पर स्मृति आवंटित करने के लिए .NET रनटाइम को निर्देशित करता है।
यह है स्टीव की तरह ने कहा, केवल असुरक्षित कोड संदर्भ में प्रयोग किया (उदा, आप संकेत का उपयोग करना चाहते हैं)।
यदि आप अपने सी # एप्लिकेशन में असुरक्षित कोड का उपयोग नहीं करते हैं, तो आप कभी की आवश्यकता नहीं होगी।
पॉल,
यहां हर किसी ने कहा है के रूप में, उस कीवर्ड क्रम ढेर के बजाय ढेर पर आवंटित करने के लिए निर्देश देता है। यदि आप वास्तव में रुचि रखते हैं तो इसका अर्थ है, this article देखें।
+1 ध्यान दें कि बचने के विश्लेषण के कारण, 'प्रबंधित' को स्टैक पर आवंटित किया जा सकता है। – Sung
Stackalloc ढेर है, जो कचरा है कि बार-बार पैदा करने और एक विधि के भीतर मूल्य प्रकार के सरणियों को नष्ट करके उत्पन्न होगा से बचने के लिए इस्तेमाल किया जा सकता पर डेटा आवंटित करेगा।
public unsafe void DoSomeStuff()
{
byte* unmanaged = stackalloc byte[100];
byte[] managed = new byte[100];
//Do stuff with the arrays
//When this method exits, the unmanaged array gets immediately destroyed.
//The managed array no longer has any handles to it, so it will get
//cleaned up the next time the garbage collector runs.
//In the mean-time, it is still consuming memory and adding to the list of crap
//the garbage collector needs to keep track of. If you're doing XNA dev on the
//Xbox 360, this can be especially bad.
}
के लिए धन्यवाद – rightfold
अधिकतर उत्तर ओपी के प्रश्न के "कार्यक्षमता" भाग पर केंद्रित हैं।
मेरा मानना है कि यह कब और क्यों जवाब देगा:
आपको इसकी आवश्यकता कब है?
कई छोटे सरणियों के कैश इलाके के साथ सबसे अच्छा बुरी से बुरी हालत प्रदर्शन के लिए ।
अब औसत ऐप में आपको इसकी आवश्यकता नहीं होगी, लेकिन रीयलटाइम संवेदनशील परिदृश्यों के लिए यह अधिक निर्धारक प्रदर्शन प्रदान करता है: कोई जीसी शामिल नहीं है और आप सभी कैश हिट की गारंटी देते हैं।
(क्योंकि सबसे खराब केस प्रदर्शन औसत प्रदर्शन से अधिक महत्वपूर्ण है।)
ध्यान रखें कि .NET में डिफ़ॉल्ट स्टैक आकार छोटा है!
(मुझे लगता है कि यह सामान्य ऐप्स के लिए 1 एमबी और एएसपीनेट के लिए 256 केबी है?)
प्रैक्टिकल उपयोग उदाहरण के लिए रीयलटाइम ध्वनि प्रसंस्करण शामिल हो सकता है।
- 1. मुझे MPI_Barrier() का उपयोग करने की आवश्यकता कब होगी?
- 2. `stackalloc` कीवर्ड का व्यावहारिक उपयोग
- 3. मुझे सी ++ में अनाम कक्षा की आवश्यकता कब होगी?
- 4. मुझे Backbone.js में _.bindAll() का उपयोग करने की आवश्यकता कब होगी?
- 5. stdafx.h: मुझे इसकी आवश्यकता कब होगी?
- 6. मुझे आईओएस में setNeedsDisplay को कॉल करने की आवश्यकता कब होगी?
- 7. मुझे टिंकर एप्लिकेशन में मेनलोप को कॉल करने की आवश्यकता कब होगी?
- 8. मुझे एएसपी.NET नियंत्रणों पर निपटान क्यों करने की आवश्यकता होगी?
- 9. मुझे बराबर और हैशकोड विधियों को ओवरराइड करने की आवश्यकता कब होगी?
- 10. मुझे SQL सर्वर में Begin/End Blocks और Go कीवर्ड का उपयोग करने की आवश्यकता कब है?
- 11. कीवर्ड का उपयोग कब करें
- 12. आपको देर से स्थिर बाध्यकारी उपयोग करने की आवश्यकता कब होगी?
- 13. मुझे एक एफबी की आवश्यकता कब होगी: app_id या fb: admins?
- 14. मुझे जावास्क्रिप्ट प्रोटोकॉल निर्दिष्ट करने की आवश्यकता कब है?
- 15. मुझे कॉल करने की आवश्यकता कब है - [UIViewController initWithNibName: बंडल:]?
- 16. मुझे "स्वयं" कीवर्ड का उपयोग कब करना चाहिए?
- 17. __declspec क्या है और मुझे इसे कब उपयोग करने की आवश्यकता है?
- 18. मुझे बिगरे का उपयोग करने की आवश्यकता कब है और क्यों?
- 19. क्यों (और कब) मुझे आकार के बाद कोष्ठक का उपयोग करने की आवश्यकता है?
- 20. मुझे Int32.MaxValue से अधिक की जांच करने की आवश्यकता क्यों होगी?
- 21. PHP में क्लोजर ... क्या, ठीक है, वे हैं और आपको उन्हें कब उपयोग करने की आवश्यकता होगी?
- 22. मुझे अपाचे कॉमन्स 'Validate.isTrue का उपयोग कब करना चाहिए, और मुझे केवल' assert 'कीवर्ड का उपयोग कब करना चाहिए?
- 23. सी # का उपयोग कब करें "यह" कीवर्ड
- 24. हमें [ब्राउज़ करने योग्य (सत्य)] का उपयोग करने की आवश्यकता कब है?
- 25. किसी को एप्लिकेशन में एक अलग प्रक्रिया बनाने की आवश्यकता कब होगी?
- 26. iPhones के लिए विकास शुरू करने की मुझे क्या आवश्यकता होगी?
- 27. इस कीवर्ड को C#
- 28. क्या मुझे jquery.ui.js का उपयोग करने के लिए jquery संस्करण फ़ाइल शामिल करने की आवश्यकता है?
- 29. सी # में अस्थिर कीवर्ड का उपयोग कब किया जाना चाहिए?
- 30. मुझे आईओएस एप्लिकेशन में थ्रेड-सुरक्षा के बारे में चिंता करने की आवश्यकता कब है?
@ पॉल: मैंने केवल थोड़ा और पदार्थ जोड़ने के लिए प्रश्न को संशोधित किया। आपके शुरुआती वाक्यांश के साथ वास्तव में कुछ भी गलत नहीं था। – TheTXI
समय लेने के लिए धन्यवाद – PaulB
क्या कोई बता सकता है कि किसी को जवाब में असुरक्षित ऑपरेशन का उपयोग करने की आवश्यकता है? – Sung