如果我运行
string myString = "*.txt";
Print("sizeof(char): " + sizeof(char) + " bytes");
Print("myString.Length * sizeof(char): " + (myString.Length * sizeof(char)) + " bytes");
它将打印
sizeof(char):2个字节
myString.Length * sizeof(char):10个字节
但是,如果我从第一个答案到this question运行代码:
myString = "*.txt"
long size = 0;
using (Stream s = new MemoryStream())
{
BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize(s, myString);
size = s.Length;
}
Print("myString Serialized Size: " + size + " bytes");
我明白了
myString序列化大小:29个字节
其中哪一个更准确地表示了我的字符串在内存中占用了多少空间?
答案 0 :(得分:3)
询问字符串的大小(字节)很复杂;
string
对象本身具有字符串长度和要考虑的对象开销,因此存在“填充”等Encoding
; ASCII,UTF-8,UTF-16等- plus ,您需要知道是否包含BOM表BinaryFormatter
运行它; BinaryFormatter
是通用串行器,其中包括类型元数据,字段名称等;通常,您应该几乎从不将BinaryFormatter
...用于任何事情:)所以:您得到意外的答案的原因是您提出了错误的问题。对于“记忆中”的讨论,您实际上是在追求第一个项目符号。给出确切答案并不容易,因为对象开销的大小取决于您的目标平台。