.NET 中枚举类型的内存分配
Memory allocation for enumerated types in .NET
现在,当我过去经常使用嵌入式系统和严格的内存限制时,我记得我们必须非常注意所使用的类型以及它们的使用方式。现在,Windows 程序员浪费 space 是典型的,仅仅因为你有几 GB 的内存。无论如何,我不想在没有必要的时候浪费,因为如果每个应用程序(和 OS)都这样做,那么所有这些都会累积起来,你最终会得到一台运行缓慢的 PC。
话虽如此,我想到的是 C# 或 .NET 中的枚举类型,因为它与您使用的语言无关。例如,如果我这样定义一个枚举类型:
enum FreeEnumeration {
One,
Two,
Three
}
在分配物理内存时,它占用的字节数是否与此完全相同:
enum SpreadEnumeration {
One = 1000,
Two = 2000,
Three = 3000
}
对于那些不明白这一点的人,在某些(早期)编译器中,枚举通常作为查找表存储在内存中,因此第二个将占用大约 3000 个槽位。
现在,我倾向于认为在 .NET 中它们不是查找表,并且会占用 3 个整数的 space 加上任何其他信息。还是我弄错了?只是好奇,我不想因为想偷懒就用零填满内存。
enum
的大小就是 int
(默认情况下)。有关详细信息,请参阅 。
枚举引用结构的大小就是其中元素的数量。
现在,当我过去经常使用嵌入式系统和严格的内存限制时,我记得我们必须非常注意所使用的类型以及它们的使用方式。现在,Windows 程序员浪费 space 是典型的,仅仅因为你有几 GB 的内存。无论如何,我不想在没有必要的时候浪费,因为如果每个应用程序(和 OS)都这样做,那么所有这些都会累积起来,你最终会得到一台运行缓慢的 PC。
话虽如此,我想到的是 C# 或 .NET 中的枚举类型,因为它与您使用的语言无关。例如,如果我这样定义一个枚举类型:
enum FreeEnumeration {
One,
Two,
Three
}
在分配物理内存时,它占用的字节数是否与此完全相同:
enum SpreadEnumeration {
One = 1000,
Two = 2000,
Three = 3000
}
对于那些不明白这一点的人,在某些(早期)编译器中,枚举通常作为查找表存储在内存中,因此第二个将占用大约 3000 个槽位。
现在,我倾向于认为在 .NET 中它们不是查找表,并且会占用 3 个整数的 space 加上任何其他信息。还是我弄错了?只是好奇,我不想因为想偷懒就用零填满内存。
enum
的大小就是 int
(默认情况下)。有关详细信息,请参阅 。
枚举引用结构的大小就是其中元素的数量。