C#数据类型大小是固定还是可变?

时间:2018-04-19 09:50:02

标签: c# .net memory

当引用Jon Skeet撰写的this文章时,我发现在C#中,int将是4个字节的内存,而struct是这样的:

struct PairOfInts
{
    public int a;
    public int b;
}

总计8字节的内存,因为:

  

内存插槽大到足以包含两个整数(因此它必须是8个字节)。

所以,如果我们有这个:

public int a = 0;
public int b = 2147483647; //the max allowed for an int

ab仍然只占用4个字节的内存吗?字符串也一样吗?例如:

public string c = "";
public string d = "somethingreallyreallylong";

1 个答案:

答案 0 :(得分:3)

.NET中有两种类型绝对忽略"固定大小"规则:string和数组(int[]SomeType[,,]等)。字符串和数组的大小适合于构造中声明的内容 ;构建后,每个实例都是固定大小的。所有其他类型都是固定大小。

请注意,d只是字符串的引用引用采用固定大小。因此:cd的大小相同,即使没有字符串:可能是8个字节或4个字节,具体取决于您是在64位还是32位上运行。但是,实际的string 对象将是创建它以适合内容时的分配大小。

请注意&#34;已修复&#34;并不意味着提前知道和预测&#34;。对于许多类型,运行时/ JIT根据执行环境决定大小; IntPtr32Vector<T>等 - 具有事先无法真正知道的大小,但一旦知道:在应用程序执行期间是固定的。即使对于许多struct,也可以在运行时确定填充等。