刚刚看了李建忠老师的 C#和C++/CLI中sizeof操作符讨论 因此一直想搞清楚C# 中的class到底占用了多少内存。翻阅资料 MSDN: 结构(值类型)的大小被计算为其字段大小的总和,外加由于将这些字段与其自然边界对齐而增加的任何开销。 请考虑以下 C# 结构(为简单起见,我已经避免为下列成员指定任何访问修饰符): struct BadValueType { char c1; int i; char c2; } 就像非托管 C++ 中的默认封装一样,整数在四字节边界上布局,因此尽管第一个字符使用两个字节(托管代码中的 char 是 Unicode 字符,因而占据两个字节),但该整数向上移动至下一个 4 字节边界,并且第二个字符使用随后的 2 个字节。得到的结构在用 Marshal.SizeOf 度量时是 12 个字节(当用在我的 32 位计算机上运行的 .NET Framework 2.0 上的 sizeof 度量时,也是 12 个字节)。如果我将其重新组织为如下所示的结构,则对齐方式将如我所愿,从而得到 8 字节结构: struct GoodValueType { int i; char c1; char c2; } |
|