C#中的sizeof空字符串

时间:2011-04-17 01:46:39

标签: c# string

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

3 个答案:

答案 0 :(得分:10)

It's 18 bytes

  

16字节内存+每字符分配2字节+最后空字符2字节。

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

.Net 4.0中删除了m_ArrayLength字段(您可以在参考源中看到这一点)

答案 1 :(得分: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。这在调试器中非常明显,请查看this answer以获取提示。

答案 2 :(得分:3)

Jon Skeet最近在这个问题上写了一篇完整的article

在x86上,空字符串是16个字节,而在x64上,它是32个字节