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

时间:2014-03-26 18:25:49

标签: c# vb.net memory memory-management

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

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

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

由于

战神

2 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:1)

根据MSDN article

  

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

因此,使用常量,如下:

const int myConst = 5;
int x = myConst;

字面意思(原谅双关语)与以下代码没什么区别:

int x = 5;

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