मैंने सॉकेट के माध्यम से भेजने के लिए एक संरचना परिभाषित की है। मैं इसका आकार प्राप्त करना चाहता हूं लेकिन sizeof
असुरक्षित है और "System.Runtime.InteropServices.MarshalSizeOf
" के लिए समान है। क्या इसका आकार सुरक्षित तरीके से प्राप्त करने का कोई तरीका है?सी # क्यों आकार असुरक्षित है और एक सुरक्षित तरीके से संरचना का आकार कैसे प्राप्त करें?
उत्तर
प्रबंधित structs के लिए ऐसा करने का कोई तरीका नहीं है। Marshal.SizeOf
केवल मार्शेल प्रकारों पर डेटा के आकार को वापस कर देगा जिसमें संरचना शामिल है ... मई कुछ प्लेटफ़ॉर्म पर प्रबंधित प्रकारों के लिए सही हो, लेकिन दूसरों पर नहीं।
यह डिज़ाइन द्वारा है इसलिए जेआईटी प्लेटफार्म के आधार पर अलग-अलग structs रख सकता है।
अधिक यहाँ जानकारी: Chris Brumme's blog
महत्वपूर्ण सवाल यह है कि आपको संरचना के आकार को जानने की आवश्यकता क्यों है? बाधाएं यह एक असुरक्षित कारण के लिए है (जिस स्थिति में आप 'आकार' का उपयोग कर सकते हैं) या यह पी/आमंत्रण के लिए है (जिस स्थिति में 'मार्शल। सिस्टऑफ' सही उत्तर है)। – Gabe
सहमत हुए। सिर्फ मूल प्रश्न का उत्तर देने की कोशिश कर रहा था: "क्यों आकार असुरक्षित है और एक सुरक्षित तरीके से संरचना का आकार कैसे प्राप्त करें?" :-) – Jcl
एक कारण: आप कई संरचनाओं की एक सरणी बनाना चाहते हैं और आपको यह जानने की जरूरत है कि 2 जीबी में कितने फिट होंगे। आपको यह जानने की जरूरत है कि रनटाइम कितनी मेमोरी संरचना के लिए आवंटित करेगा। –
आप यह निर्धारित क्या JIT (रनटाइम पर) परिभाषित करेगा कामयाब प्रकार के आकार हो जाएगा देता है कि एक आवरण पुस्तकालय के लिए my blog post देखें। यह sizeof
आईएल निर्देश का उपयोग करके काम करता है जो सी # में बिल्कुल प्रकट नहीं होता है। इसे किसी भी विशेष अनुमति के साथ चलाया जा सकता है और सत्यापित है।
नोट: यह वास्तव में आप जो चाहते हैं वह हो सकता है या नहीं भी हो सकता है। यह एक संरचना के लिए 8
वापस कर सकता है जो वास्तव में केवल एक ही बाइट है। मैं वास्तव में आपके प्रश्न को पूरी तरह से समझ नहीं पा रहा हूं, इसलिए मुझे यकीन नहीं है कि यह वास्तव में आप क्या चाहते हैं या नहीं।
- 1. एक संरचना सदस्य का आकार
- 2. सी संरचना आकार संरेखण
- 3. क्यों आकार (param_array) सूचक का आकार है?
- 4. एक निश्चित आकार बफर (सरणी) असुरक्षित क्यों होना चाहिए?
- 5. ऐरे का आकार कैसे प्राप्त करें?
- 6. सी # आकार का दशमलव?
- 7. फ़ोल्डर का आकार प्राप्त करें
- 8. फ़ाइल का आकार कैसे प्राप्त करें
- 9. संवाद आकार कैसे प्राप्त करें?
- 10. .NET आकार बदलें: पुराना आकार प्राप्त करें?
- 11. सी #: पूरा डेस्कटॉप आकार प्राप्त करें?
- 12. क्यों ArrayList आकार() के बजाय आकार() प्राप्त नहीं करता है?
- 13. mysql डेटाबेस का आकार कैसे प्राप्त करें?
- 14. "System.Drawing.Image" का फ़ाइल आकार कैसे प्राप्त करें
- 15. मोंगो डीबी: संग्रह आकार आकार से अधिक आकार का परिणाम
- 16. सी # छवि का आकार बदलने का आकार फ़ाइल आकार
- 17. अक्का अभिनेता से संदेश कतार का आकार कैसे प्राप्त करें?
- 18. शून्य आकार संरचना
- 19. जावा का उपयोग कर राम आकार और हार्ड डिस्क का आकार कैसे प्राप्त करें?
- 20. सुरक्षित धागा ढेर आकार?
- 21. एंड्रॉइड में एक कस्टम संवाद का आकार कैसे प्राप्त करें?
- 22. पायथन डेटा संरचना का स्मृति आकार
- 23. हैंडलर से छवि आकार प्राप्त करें
- 24. सी संरचना को कैसे एक और संरचना प्रकार कास्ट करने के लिए करें यदि उनकी मेमोरी आकार बराबर है?
- 25. सी ++ में एक ही आकार और बूल समान आकार क्यों है?
- 26. jquery छवि का आकार प्राप्त करें
- 27. पायथन। किसी ऑब्जेक्ट का आकार प्राप्त करें
- 28. सी/सी ++ आकार का ऑपरेटर: आकार ('ए') अलग-अलग मान क्यों देता है?
- 29. आवेदन exe आकार आसानी से प्राप्त करें
- 30. एक्शनस्क्रिप्ट 3 का आकार प्राप्त करें
सुरक्षित परिभाषित करें। जहां तक सीएलआर का संबंध है, 'मार्शल.SizeOf' पूरी तरह से सुरक्षित है। – Noldorin
नोल्डोरिन - मार्शल.SizeOf को निष्पादित करने के लिए UnSafe कोड अनुमति सेट की आवश्यकता है। यह ओपी का मुद्दा –
मैंने सिस्टम की कोशिश की। Runtime.InteropServices.MarshalSizeOf (typeof (MyStruct)) और कहीं भी "असुरक्षित" नहीं है और असुरक्षित कोड चेकबॉक्स को अनचेक भी किया गया है। यह अब मेरे लिए ठीक काम करता है। ?????? – 5YrsLaterDBA