C#中常量的内存分配

17

使用以下代码时,内存是如何分配的:

public class MyClass
{       
    public const string myEVENT = "Event";
    //Other code
}
1个回答

17

这是一个编译时常量,因此如果您从其他程序集中使用它,“Event”将被复制到这些其他程序集的IL中。 它是否跨程序集进行内部处理取决于CLR设置。

但是,如果您担心每个MyClass实例都会获得一个新字符串或新字符串变量,那么您不需要担心-const意味着static

总之,除非您有巨大的(巨大的)常量堆(或巨大的字符串常量),否则不会对您造成问题。


1
我认为这个关于“矛盾修辞”的维基百科页面应该指向这里...(Jon使用IIRC...就像Chuck Norris想知道他是否能够起床一样。在这里查看其他Jon的事实... :) - Noctis
1
@vimalraturi:这意味着无论实例数量如何,都只有一个字段,即使没有任何实例。 - Jon Skeet
1
说“除非你有大量常量,否则不会出现问题”是不正确的。由于常量在编译时被替换,所以它永远不应该有问题。 - CBFT
@CBFT:它在编译时被替换正是重点。你最终会在每个引用该常量的程序集中得到该常量的副本。正如我在答案中所说,这些单独的副本(每个程序集一个)是否被合并是一个更加复杂的问题。 - Jon Skeet
我和许多用户正在使用这些答案来编写代码。这就是为什么对于旧问题有误导性的答案仍然是一个问题。这里已经有非常好的答案了:https://dev59.com/zmAg5IYBdhLWcg3wfrAn - CBFT
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接