我有以下课程:
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(使用前将#替换为@)