c#中的sizeof空字符串

本文关键字:字符串 sizeof 中的 | 更新日期: 2023-09-27 17:50:27

在Java中,一个空字符串是40字节。在Python中是20个字节。c#中的空字符串对象有多大?我不能做sizeof,我不知道还有什么办法。谢谢。

c#中的sizeof空字符串

这是18个字节:

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

注意这是关于。net 1.1的。

m_ArrayLength字段在。net 4.0中被删除了(您可以在参考源代码中看到这一点)

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

因此,空字符串是4 + 4 + 4 + 2 = 14字节,在。net 4.0上四舍五入为16字节。在早期版本上为20字节。给定的值适用于x86。这些都是在调试器中非常可见的,检查这个答案的提示。

Jon Skeet最近写了一篇关于这个主题的文章。

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