猿问

C#结构体内存布局问题。

 [StructLayout(LayoutKind.Explicit, Pack = 2)]
    public struct RCV_REPORT_STRUCTExV3
    {
        [FieldOffset(0)]
        public System.UInt16 m_cbSize; 
        [FieldOffset(2)]
        public System.UInt32 m_time;    
        [FieldOffset(6)]
        public System.UInt16 m_wMarket; 
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 10)]
        [FieldOffset(8)]
        public char[] m_szLabelName;   
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)]
        [FieldOffset(18)]             //此处的偏移量位置应该设置为18的,但是报错:在18偏移位置包含一个对象字段,把偏移量设置为
                                                 //20程序正常,怎么回事。因为某些原因这个结构的内存大小需要固定,设置为20就会影响到其他字
                                                 //段,或者结构太大。先谢谢了!
        public char[] m_szName; 

MM们
浏览 837回答 1
1回答

LEATH

大声告诉我数组这个算引用类型还是值类型? 引用类型需要额外4个字节用于引用(64位机器8字节)
随时随地看视频慕课网APP
我要回答