【问题标题】:In 64 bit systems, a 32 bit variable occupies less space than a 64 bit object?在 64 位系统中,32 位变量占用的空间比 64 位对象少?
【发布时间】:2011-01-26 23:15:24
【问题描述】:

.NET Framework 为 Int32 分配的内存少于在 64 位系统中为 Int64 分配的内存?

【问题讨论】:

    标签: .net memory 64-bit integer 32-bit


    【解决方案1】:

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

    【讨论】:

    • @Lucas:它们在寄存器中消耗相同数量的空间。内存中的不同数量。
    【解决方案2】:

    【讨论】:

    • 您的回答很有帮助,但you can make it better 包含您链接到的页面的摘要或相关部分。即使您包含的链接将来会中断,这也将有助于您的答案保持良好状态。
    【解决方案3】:

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

    但是,Int32 和 Int64 都是不好的例子,因为它们是结构体。对象在 x64 和 x86 上占用的空间明显不同,因为它们基本上是指针,而 x64 上的指针宽度是 x86 上的两倍。这适用于函数地址、跳转地址、vtables、调用指令等等。一个 x64 编译的应用程序和一个用于 x64 的 IL 应用程序 JIT 代码将明显大于其对应的 x86。过去,x86 代码生成更成熟,优化更积极,这仅仅是因为编译器更成熟(这也适用于 JIT 代码生成),但编译器赶上了,现在 x64 优化已达到同等水平,如果不比 x86 更好。

    【讨论】:

    • 改写你的答案:给定的结构实例在任何平台上消耗相同的内存空间。不同的结构在同一平台上消耗不同的内存空间。仅根据平台占用不同空间的对象。
    • @estourodepilha.com:并非总是如此。这方面的一个示例是当结构包含引用类型字段或平台相关字段时,例如IntPtr - 相同的结构声明将在 x64 上消耗更多内存。
    猜你喜欢
    • 2014-12-11
    • 1970-01-01
    • 2012-03-17
    • 2011-07-07
    • 1970-01-01
    • 2012-09-01
    • 2012-03-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多