संरचना / मानों के सरणियों के लिए, मेरे पास अलग-अलग परिणाम हैं:
first = Marshal.UnsafeAddrOfPinnedArrayElement(array, 0).ToInt64();
second = Marshal.UnsafeAddrOfPinnedArrayElement(array, 1).ToInt64();
arrayElementSize = second - first;
(ओवरसाइम्प्लीफाइड उदाहरण)
जो भी दृष्टिकोण है, आपको वास्तव में यह समझने की आवश्यकता है कि कैसे .Net परिणामों की सही व्याख्या करने के लिए काम करता है। उदाहरण के लिए, लौटाया गया तत्व आकार "गठबंधन" तत्व आकार है, जिसमें कुछ पैडिंग है। ओवरहेड और इस प्रकार आकार एक प्रकार के उपयोग के आधार पर अलग-अलग होता है: जीसी हीप पर "बॉक्सिंग", ढेर पर, एक क्षेत्र के रूप में, एक सरणी तत्व के रूप में।
(मैं यह जानना चाहता था कि जेनरिक की "वैकल्पिक" तर्कों की नकल करने के लिए "डमी" खाली संरचनाओं (किसी भी क्षेत्र के बिना) का उपयोग करने का मेमोरी प्रभाव क्या होगा; खाली संरचना वाले विभिन्न लेआउट के साथ परीक्षण करना, मैं देख सकता हूं कि एक खाली संरचना का उपयोग करता है; कम से कम) 1 बाइट प्रति तत्व; मुझे अस्पष्ट रूप से यह याद है क्योंकि नेट प्रत्येक क्षेत्र के लिए एक अलग पते की आवश्यकता है, जो काम नहीं करेगा यदि कोई क्षेत्र वास्तव में खाली / 0-आकार का था)।