分享

C#中类的size

 alexwhu 2006-10-17

刚刚看了李建忠老师的 C#和C++/CLI中sizeof操作符讨论 因此一直想搞清楚C# 中的class到底占用了多少内存。翻阅资料

MSDN:

结构(值类型)的大小被计算为其字段大小的总和,外加由于将这些字段与其自然边界对齐而增加的任何开销。
引用类型的大小是其字段大小向上舍入到下一个 4 字节边界,外加 8 字节的开销。这意味着所有引用类型都至少占用 12 字节,因此在 C# 中,长度小于 16 字节的任何对象作为结构可能更有效一些。

请考虑以下 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;
}

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多