在Java中,一个空字符串是40个字节。在Python中它是20个字节。 C#中的空字符串对象有多大?我不能做sizeof
,我不知道如何找出答案。谢谢。sizeof空字符串在C#
回答
16字节+2每字符的字节分配+ 2个字节的最后空字符。
请注意,这是关于.Net 1.1写的。
的m_ArrayLength
场在.NET 4.0中移除(你可以看到这个参考源)
乔恩斯基特最近关于这一主题写了一整article。
在x86上,一个空字符串为16个字节,在x64这是32个字节
@SLaks谈到的空字符怎么样?这是必要的吗? – 2011-04-17 02:08:57
@Dervin Thunk,不知道...阅读文章以获取更多详细信息;) – 2011-04-17 02:10:27
16字节对于.NET 4.0 x86是正确的,零终止符适用。最多三个字符,下一个较大的字符串是一个包含4个字符,20个字节的字符串。单声道最有可能是4个字节。 – 2011-04-17 02:32:11
的CLR版本的问题。在.NET 4之前,一个字符串对象有一个额外的4字节字段,用于存储“容量”m_arrayLength字段。该字段不在.NET 4中。它具有标准对象头,4个字节用于同步块,4个字节用于方法表指针。然后4个字节存储字符串长度(m_stringLength),然后每个字符存储2个字节。和一个0字符,以使其与本机代码兼容。对象总是4个字节的倍数,最小16个字节。
因此,一个空字符串是4 + 4 + 4 + 2 = 14个字节,在.NET 4.0上四舍五入为16个字节。早期版本为20字节。给定的值是x86。这在调试器中非常明显,请检查提示this answer。
欣赏它,谢谢。你为什么说“最有可能的单声道将有4个字节”? – 2011-04-17 02:51:43
因为它基于SSCLI20,而SSCLI20又基于版本2 CLR的源代码。 – 2011-04-17 02:59:37
那么'm_arrayLength'还在吗?大概是 – 2011-04-17 03:01:06
- 1. C字符串数组的sizeof()改变
- 2. 的sizeof字符串文字
- 3. 字符串矩阵的sizeof
- 4. C++空字符串
- 5. c#空字符串?
- 6. C字符串变为空
- 7. c#空字符串 - > null?
- 8. C字符串空零?
- 9. C++中的空字符串
- 10. C字符串空终止
- 11. 分割字符串与空间向量的字符串在C
- 12. 在C#中空格后丢弃字符串字符串
- 13. sizeof vs sizeof()在标准C?
- 14. 找到sizeof字符数组C++
- 15. C-sizeof(字符串)结果小于它应该是
- 16. 在C#前面加上空字符串
- 17. 在C中接受空字符串
- 18. 分割字符串用空格在C#
- 19. C#:参数验证:空/空字符串
- 20. 有关的sizeof(字符*)和sizeof(的char [])
- 21. Xpages空字符串或空字符串
- 22. SIZEOF在C和C++
- 23. 为什么sizeof(str)8当字符串有26个字符?
- 24. C#字符串以空字符串结尾吗?
- 25. C:字符串Concatenation:空终止字符串
- 26. c字符串复制无法清空字符串
- 27. C#:拆分字符串,而不是返回空字符串
- 28. C字符串字符串
- 29. C++字符串!=字符串
- 30. 空字符串
任何方式来测试这个?我究竟如何以编程方式发现? – 2011-04-17 02:02:40
您可以使用WinDBG。 – SLaks 2011-04-17 02:03:13
或64位系统上的26个字节,并且不要忘记对齐。 – Random832 2011-04-17 02:05:46