在Java中,空字符串是40个字节。在Python中它是20个字节。 C#中的空字符串对象有多大?我做不到sizeof
,我不知道怎么回事。感谢。
答案 0 :(得分:10)
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个字节