string.Empty在CLR中占用了多少空间

时间:2011-02-22 14:58:18

标签: .net string clr memory-management

string.Empty在CLR中占用多少空间?
我猜它只是NULL字符的一个字节。

3 个答案:

答案 0 :(得分:8)

不,字符串是一个完整的对象,有一个对象标题(包含类型引用,同步块等),长度和所需的任何字符......这将是一个单独的空字符(两个字节)和适当的填充以整数为4或8个字节。

请注意,虽然.NET中的字符串有一个长度字段,但为了互操作,它们仍然是空终止的。空字符包含在长度中。

当然,string.Empty只会引用单个对象,无论你使用它多少次......但引用将是4或8个字节,所以如果你有:

string a = string.Empty;
string b = string.Empty;
string c = string.Empty;

将是三个引用(12或24个字节),所有引用都指向同一个对象(大小可能大约为20或24个字节)。

答案 1 :(得分:1)

我认为每个.NET对象在32位系统上需要一个8字节的头,在64位系统上需要16字节的头。但是当string.Empty被共享时(如果用作给定的常量)那么只需要一个实例(因为它是不可变的并因此共享 - 在应用程序中对它的任何使用都无关紧要,因为我的猜测是.NET框架已经在内部使用它)因此只需要指针(4或8个字节,具体取决于32位或64位主机)。

但是32位和64位主机上string.Empty本身的大小应该是12字节或20字节。

答案 2 :(得分:-1)

每个字符一个字节...... Null需要我的角色......