C# 如何确定对象的大小?

2024-04-03

我有以下课程:

public class MyClass
    {
        public string Name { get; set; }
        public int Age { get; set; }
        public double Amount { get; set; }
    } 

当我尝试使用 WinDbg 在 64 位系统上找出此类的大小时,我得到的大小是 40 我无法理解,据我读过 MyClass 应该有

8 bytes for SyncBlock
8 bytes for TypeHandle
8 bytes for string reference
4 bytes for Int32
8 bytes for double

= 36 bytes

我没有 10 声誉,这就是为什么我无法发布图片。 有人知道为什么 WinDbg 显示 4 个额外字节吗?


我相信您所看到的是需要与 64 位构建中的 8 字节边界对齐(以及 32 位构建中的 4 字节边界)的效果。 40 是 8 字节边界上最接近的 >= 36 的大小。这些链接讨论对象大小:

内存和字符串(Jon Skeet 的博客) http://msmvps.com/blogs/jon_skeet/archive/2011/04/05/of-memory-and-strings.aspx

C# 结构和对象大小的基准测试 http://blog.softwx.net/2013/01/benchmarking-c-struct-and-object-sizes.html

深入了解 .NET Framework 内部结构,了解 CLR 如何创建运行时对象 http://msdn.microsoft.com/en-us/magazine/cc163791.aspx

C# 字符串占用多少内存 http://blog.abstractpath.com/2012/08/how-much-memory-does-c-string-take-up.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# 如何确定对象的大小? 的相关文章

随机推荐