2010-03-10 15 views
6

Marshal.SizeOf(). की परिभाषा पढ़ें यह कहता है: The size returned is the size of the unmanaged object. The unmanaged and managed sizes of an object can differ. क्या इसका मतलब है मार्शल.SizeOf आपको परिभाषा आकार वापस कर देगा, लेकिन वास्तविक स्मृति आवंटित आकार नहीं होगा क्योंकि संरेखण के लिए कुछ पैडिंग हो सकती है?सी # अप्रबंधित वस्तु का आकार क्या है?

उदाहरण के लिए:

struct MyStruct 
{ 
    char c; 
} 

आकार 1 अप्रबंधित वस्तु (अप्रबंधित आकार) के लिए बाइट हो सकता है अगर मैं Marshal.SizeOf() का उपयोग लेकिन 2 या 4 प्रबंधित वस्तु (प्रबंधित आकार) के लिए बाइट्स हो सकता है अगर मैं sizeof( का उपयोग करें) । क्या मैं सही हू?

उत्तर

1

बस एक छोटा उदाहरण ऐप लिखें।
आपके उदाहरण में MyStruct का प्रबंधन प्रबंधित और अप्रबंधित मामले में 1 का आकार है।
अधिक जटिल वस्तुओं के लिए वास्तविक आकार संरेखण और अन्य ओएस निर्भर चीजों जैसी चीज़ों पर भी निर्भर हो सकता है।

2

मार्शल .izeOf का एकमात्र अर्थ मार्शल.स्ट्रक्चर टीओपीआरटी विधि के लिए आवश्यक अप्रबंधित स्मृति ब्लॉक का आकार है। SizeOf प्रबंधित संरचना आकार के बराबर और अप्रबंधित संरचना आकार के बराबर नहीं हो सकता है। संरचना ToPtr पैडिंग के साथ या बिना संरचना को क्रमबद्ध कर सकता है, यह आंतरिक विवरण है। SizeOf केवल रिपोर्ट करता है कि इस ऑपरेशन की कितनी मेमोरी की आवश्यकता है, और कुछ भी।

संबंधित मुद्दे