编写如下代码:            
char[] arr = new char[5];
            arr[0] = 'a';
            arr[1] = 'b';
            arr[2] = 'c';
            arr[3] = 'd';
            arr[4] = 'e';
arr数组的内存布局如下:
f4 16 33 79 05 00 00 00 61 00 62 00 63 00 64 00 65 00 00 00上面05 很好理解,应该是字符的数量,在后面是字符的数据,我不懂前四字节代表什么意思?

解决方案 »

  1.   

     05 00 00 00 表示数据最大长度为long 0xFF FF FF FF61 00 表示'a' Unicode的编码 双字节表示
    下同
      

  2.   

    f4 16 33 79 应该是arr这个变量存储的地址吧,也就是整个数组的入口地址。32位地址的表达在16进制下,是8位
      

  3.   


    void Main()
    {
    char[] arr = new char[5];
      arr[0] = 'a';
      arr[1] = 'b';
      arr[2] = 'c';
      arr[3] = 'd';
      arr[4] = 'e';
    Console.WriteLine(arr);
    }
    IL_0001:  ldc.i4.5    
    IL_0002:  newarr      System.Char
    IL_0007:  stloc.0     
    IL_0008:  ldloc.0     
    IL_0009:  ldc.i4.0    
    IL_000A:  ldc.i4.s    61 
    IL_000C:  stelem.i2   
    IL_000D:  ldloc.0     
    IL_000E:  ldc.i4.1    
    IL_000F:  ldc.i4.s    62 
    IL_0011:  stelem.i2   
    IL_0012:  ldloc.0     
    IL_0013:  ldc.i4.2    
    IL_0014:  ldc.i4.s    63 
    IL_0016:  stelem.i2   
    IL_0017:  ldloc.0     
    IL_0018:  ldc.i4.3    
    IL_0019:  ldc.i4.s    64 
    IL_001B:  stelem.i2   
    IL_001C:  ldloc.0     
    IL_001D:  ldc.i4.4    
    IL_001E:  ldc.i4.s    65 
    IL_0020:  stelem.i2   
    IL_0021:  ldloc.0     
    IL_0022:  call        System.Console.WriteLine
      

  4.   

    前4个字节应该是指向数据类型的指针。当调用obj.GetType()时就是通过这个指针获取相应的类型描述的实例。