Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 在64位系统中,32位变量比64位对象占用更少的空间?_.net_Memory_64 Bit_Integer_32 Bit - Fatal编程技术网

.net 在64位系统中,32位变量比64位对象占用更少的空间?

.net 在64位系统中,32位变量比64位对象占用更少的空间?,.net,memory,64-bit,integer,32-bit,.net,Memory,64 Bit,Integer,32 Bit,在64位系统中,.NET Framework为Int32分配的内存比为Int64分配的内存少。不,它们消耗的空间量相同,因为最小的可寻址空间是64位。 Int32和Int64应在所有平台上消耗相同的空间(意味着在x86和x64上,一个Int32消耗的空间量与另一个Int32消耗的空间量相同)。在所有平台上,Int32的消耗量应与Int64不同 然而,Int32和Int64都是糟糕的示例,因为它们都是结构。对象在x64和x86上消耗的空间明显不同,因为它们基本上是指针,x64上的指针的宽度是x86

在64位系统中,.NET Framework为
Int32
分配的内存比为
Int64
分配的内存少。

不,它们消耗的空间量相同,因为最小的可寻址空间是64位。


Int32和Int64应在所有平台上消耗相同的空间(意味着在x86和x64上,一个Int32消耗的空间量与另一个Int32消耗的空间量相同)。在所有平台上,Int32的消耗量应与Int64不同


然而,Int32和Int64都是糟糕的示例,因为它们都是结构。对象在x64和x86上消耗的空间明显不同,因为它们基本上是指针,x64上的指针的宽度是x86上的两倍。这适用于函数地址、跳转地址、vtables、调用指令等。x64编译的应用程序和x64的IL应用程序JIT代码将显著大于x86对应程序。过去,x86代码生成更为成熟,优化也更为积极,这仅仅是因为编译器更为成熟(这也适用于JIT代码生成),但编译器赶上了,现在x64优化即使不比x86优化好,也相当于

@Lucas:它们在寄存器中消耗的空间量相同。内存量不同。请重新表述您的答案:给定的结构实例在任何平台上都会占用相同的内存空间。不同的结构在同一平台上消耗不同的内存空间。仅限使用不同空间的对象,具体取决于平台。@estourodepilha.com:不一定。这方面的一个例子是当结构包含引用类型字段或平台相关字段时,例如IntPtr-相同的结构声明将在x64上消耗更多内存。您的答案很有帮助,但可以包含摘要或链接到的页面的相关部分。这也将帮助你的答案保持伟大,即使你包括的链接在未来中断。