在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