每个对象是否为常量分配内存?

本文关键字:分配 内存 常量 对象 是否 | 更新日期: 2023-09-27 17:53:35

在我的代码设计中,我包含了很多常量。当创建一个新对象时,是为该对象的常量分配内存,还是像静态变量一样永久存储在单个实例中?在内存存储方面,静态项到底在哪里结束?

换句话说,如果我定义了100个对象,是否会有100个相同常量值的副本?

如果它们是在静态内存中定义的(无论在哪里),我希望它们是,访问它们是否需要计算机切换内存页面?经常访问常量而不是变量是否会影响性能?

感谢

阿瑞斯

每个对象是否为常量分配内存?

常量在运行时没有存储位置。对常量标识符的所有访问都会导致该常量的文字值在编译代码时替换该标识符。

根据MSDN文章:

实际上,当编译器在c#源代码中遇到常量标识符时…,它直接将文本值替换为它生成的中间语言(IL)代码。

因此,使用像这样的常量:
const int myConst = 5;
int x = myConst;

在字面上(请原谅双关语)与以下代码没有什么不同:

int x = 5;

编译器将生成相同的输出。程序集运行时,该值存储在堆栈(执行方法的本地内存)中。不需要查找、内存页面切换、内存堆访问或其他任何必要的操作。