2017-04-03 62 views
0

4字节这是我在86使用的代码和x64C#短,字节发生在86

static unsafe void Main(string[] args) 
    { 
     short a = 4; 




     short b = 5; 


     short* x = &a; 
     short* y = &b; 

     Console.WriteLine((int)x); 
     Console.WriteLine((int)y); 


     Console.ReadLine(); 


    } 

用于x86我得到的回答像“xxxxx224 xxxxx220” 针对x64我得到的回答像“xxxxx000 xxxxx002"

为什么是短,字节,布尔以在x86和普通的4个字节在x64

+0

你甚至不能保证获得相同的班级布局。 AFAIK JIT si免费选择任何它喜欢的地方。一方面存在一致性问题,另一方面存在尺寸限制。此外,32位JIT和64位JIT是完全独立的代码段。他们不需要工作一样。 – Joey

+0

此外,您从这里的答案中获得什么?如果你关心内存布局,有更好的方法来控制它,例如具有结构成员的属性。如果你不这样做,那为什么要麻烦? – Joey

+0

我想了解事情如何与此一起工作。我无法解决为什么32位JIT做到这一点,64位JIT以不同的方式作出反应。这是否有任何具体原因 – Pradeep

回答

1

这是你输出短路值的内存地址。假设您的程序编译为32位应用程序,您将得到32位值。

+1

是的,这是内存地址。所以它在32位中分配4个字节,在64位中分配2个字节? – Pradeep

+0

不,它会在所有情况下使用4个字节 - 除非您要编译为在64位上运行。只要在x64处理器上运行,对分配多少内存没有任何影响,它仍将在32位仿真器(“WOW64”)下运行。 –

+0

是的,先生,但为什么编译运行在64位分配2字节的简称和4字节编译运行32位。我错过了什么链接。我无法弄清楚它 – Pradeep