C#中的sizeof空字符串

Der*_*unk 8 c# string

在Java中,空字符串是40个字节.在Python中它是20个字节.C#中的空字符串对象有多大?我做不到sizeof,我不知道怎么回事.谢谢.

SLa*_*aks 10

这是18个字节:

16个字节的内存+每个字符分配2个字节+ 2个字节用于最终的空字符.

请注意,这是关于.Net 1.1的.

m_ArrayLength字段已在.Net 4.0中删除(您可以在参考源中看到此字段)


Han*_*ant 5

CLR版本很重要.在.NET 4之前,字符串对象有一个额外的4字节字段,用于存储"capacity",m_arrayLength字段.该字段在.NET 4中不再存在.它具有标准对象头,同步块为4个字节,方法表指针为4个字节.然后是4个字节来存储字符串长度(m_stringLength),后面跟着字符串中每个字符的2个字节.并使用0 char使其与本机代码兼容.对象总是4个字节长的倍数,最小16个字节.

因此,空字符串是4 + 4 + 4 + 2 = 14字节,在.NET 4.0上四舍五入为16字节.早期版本的20个字节.给定的值是x86.这在调试器中非常明显,请查看此答案以获取提示.