当引用this时Jon Skeet 的文章中,我发现在 C# 中,int
是 4 个字节的内存,struct
如下所示:
struct PairOfInts
{
public int a;
public int b;
}
总共需要 8 个字节的内存,因为:
The slot of memory is large enough to contain both integers (so it must be 8 bytes).
如果我们有这个:
public int a = 0;
public int b = 2147483647; //the max allowed for an int
a
和 b
仍然各占用 4 个字节的内存吗?对于字符串来说也是如此吗?示例:
public string c = "";
public string d = "somethingreallyreallylong";
最佳答案
.NET 中有两种类型绝对忽略“固定大小”规则:string
和数组( int[]
、 SomeType[,,]
等)。字符串和数组分配的大小适合构造时声明的内容;一旦构造完毕,每个实例都是固定大小的。所有其他类型都是固定大小。
请注意d
只是字符串的引用,并且引用采用固定大小。所以:c
和d
即使没有字符串,它们的大小也相同:可能是 8 字节或 4 字节,具体取决于您运行的是 64 位还是 32 位。实际string
但是,对象将是创建它时分配的任何大小以适应内容。
请注意,“固定”并不意味着“提前已知且可预测”。对于许多类型,运行时/JIT 根据执行环境决定大小; IntPtr32
, Vector<T>
等 - 无法提前真正知道大小,但一旦知道:在应用程序执行期间是固定的。甚至对于许多人来说struct
、填充等可以在运行时确定。
关于c# - C# 数据类型大小是固定的还是可变的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49917960/