VS 内存分析器告诉我,当我byte
向我的类添加一个字段时,它不会在应用程序开始时占用任何额外的内存,但如果它是int
or object
,则每个实例需要额外的 4 个字节。
是否有任何其他类型,或者我可以创建自己的在分配值之前不占用内存的类型?当值再次变为空(零)时,内存也会释放吗?
VS 内存分析器告诉我,当我byte
向我的类添加一个字段时,它不会在应用程序开始时占用任何额外的内存,但如果它是int
or object
,则每个实例需要额外的 4 个字节。
是否有任何其他类型,或者我可以创建自己的在分配值之前不占用内存的类型?当值再次变为空(零)时,内存也会释放吗?
32 位平台上的内存通常以 4 字节的分配单元进行分配。我认为 .NET 运行时就是这样做的。
C# 编译器使用的布局会导致类/结构的分配大小最小(除非您使用注释来指示其他情况,例如,当使用互操作与以不同方式布置内存的非托管代码进行通信时会这样做)。这意味着
没有。对象可能必须具有一些最小大小,并且字节足够小以适合最小值。
每个声明的变量都占用一些内存,无论是在堆栈上还是在堆上。
一个可能的例外是局部变量,它可以放入正在使用的硬件上的合适寄存器中。在这种情况下,在某些情况下,优化器和 JIT 编译器可能(强调“可能”)选择将其分配给寄存器,而不是在堆栈帧上为其分配空间。