【发布时间】:2011-12-04 17:47:33
【问题描述】:
我一直试图找出 .NET 4 x64 中字符串的开销。这就是我目前所得到的。
- x64 的 16 字节对象标头
- 4 个字节的 stringLength 字段(arrayLength 在 .NET 4 中消失了)
- (length + 1) * 2 字节的字符串内容(UTF-16,以空结尾)
因此,您希望 1 个字符的字符串为 16 + 4 + 4 = 24 字节。它可以被 8 整除,因此不需要任何填充。
但是当我查看 WinDbg 中的大小时,我发现它们占用了 32 字节。当我!dumpobject 他们时,他们说他们的大小是 28 字节,我认为这是四舍五入到 32。这是怎么回事?是否正在发生另一轮内存对齐?
【问题讨论】:
-
试着把字符串加长... 2、3 和 4 个字符需要多少内存?
-
@xanatos:每个字符多出 2 个字节。
-
起始字符可能对齐?
-
@leppie 所以 28 = 1 个字符、30 = 2 个字符、32 = 3 个字符和 34 = 4 个字符?
-
@xanatos:再次阅读问题。 1 个字符是 32 :)
标签: .net string memory .net-4.0