【问题标题】:How much memory does a C# reference consume? [duplicate]C# 引用消耗多少内存? [复制]
【发布时间】:2013-10-26 20:07:00
【问题描述】:

C# 引用消耗多少内存? 引用和对象本身一样消耗内存吗?

【问题讨论】:

    标签: c# .net reference


    【解决方案1】:

    引用以指针的形式实现,因此在 x86 模式(32 位)下运行的应用程序中,引用为 4 个字节,而在 x64 模式(64 位)中,引用为 8 个字节。

    由于引用只是指向对象的指针,因此无论它指向什么,或者即使它根本不指向任何东西(null),引用都是相同的大小。

    【讨论】:

    • 我正要回答这个问题,但当我开始怀疑在创建和维护指针本身之外的引用时肯定会涉及一些额外的开销内存时,我停了下来。
    • @Ashigore:引用中实际上根本没有开销,它只是一个指针。任何开销都与对象相关联,例如类型信息和垃圾回收引用。
    • 很有趣,感谢您澄清这一点。
    • 投反对票:为什么投反对票?如果你不解释你认为错的地方是什么,就无法改进答案。
    【解决方案2】:

    引用会消耗它所运行平台的原生字大小。

    即32位:32位。 64 位:64 位。

    所以不..您的对象的大小可以是可变的..引用将始终如上。

    【讨论】:

      【解决方案3】:

      来自第 22 页中的C# 5.0 in a Nutshell: The Definitive Reference

      引用类型需要为 参考和对象。该对象消耗与其字段一样多的字节, 加上额外的管理开销。精确的开销是 本质上对 .NET 运行时的实现是私有的,但是 开销至少为 8 个字节,用于存储 对象的类型,以及锁状态等临时信息 用于多线程和一个标志以指示它是否已被修复 来自垃圾收集器的移动。 每次引用一个对象 需要额外的 4 或 8 个字节,具体取决于 .NET 运行时在 32 位或 64 位平台上运行。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-10-25
        • 1970-01-01
        • 1970-01-01
        • 2015-05-10
        • 1970-01-01
        • 2013-06-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多