sizeof(int) on x64?

做~自己de王妃 提交于 2019-11-26 12:19:33

问题


When I do sizeof(int) in my C#.NET project I get a return value of 4. I set the project type to x64, so why does it say 4 instead of 8? Is this because I\'m running managed code?


回答1:


There are various 64-bit data models; Microsoft uses LP64 for .NET: both longs and pointers are 64-bits (although C-style pointers can only be used in C# in unsafe contexts or as a IntPtr value which cannot be used for pointer-arithmetic). Contrast this with ILP64 where ints are also 64-bits.

Thus, on all platforms, int is 32-bits and long is 64-bits; you can see this in the names of the underlying types System.Int32 and System.Int64.




回答2:


The keyword int aliases System.Int32 which still requires 4 bytes, even on a 64-bit machine.




回答3:


int means Int32 in .NET languages. This was done for compatibility between 32- and 64-bit architectures.

Here's the table of all the types in C# and what they map to .NET wise.




回答4:


An Int32 is 4 bytes on x86 and x64. An Int64 is 8 bytes either case. The C# int type is just an alias for System.Int32. Same under both runtime environments. The only type that does change depending on the runtime environment is an IntPtr:

    unsafe
    {
        var size = sizeof(IntPtr); // 4 on x86 bit machines. 8 on x64
    }



回答5:


You may be thinking of an int pointer or System.IntPtr. This would be 8 bytes on an x64 and 4 bytes on an x86. The size of a pointer shows that you have 64-bit addresses for your memory. (System.IntPtr.Size == 8 on x64)

The meaning of int is still 4 bytes whether you are on an x86 or an x64. That is to say that an int will always correspond to System.Int32.




回答6:


Remember int is just a compiler alias for the basic type Int32. Given that it should be obvious why int is only 32 bits on a 64 bit platform.




回答7:


int i;
int size = BitConverter.GetBytes(i).GetLength(0);

Fiddle Sample



来源:https://stackoverflow.com/questions/651956/sizeofint-on-x64

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!