最近一个关于 .NET string文字的问题引起了我的注意。 我知道,string文字是interned使不同的string具有相同的值引用同一个对象。 我也知道一个string可以在运行时被实现: string now = DateTime.Now.ToString().Intern(); 显然,一个在运行时被实现的string驻留在堆上,但是我认为文字被放置在程序的数据段中(并且在我对所述问题的回答中这样说)。 但是我不记得在任何地方看到这个。 我认为这是事实,因为它是如何做到这一点,事实上, ldstr IL指令是用来得到文字,似乎没有分配似乎发生了。 长话短说,string文字在哪里? 它是在堆,数据段还是我没有想到的某个地方? 编辑:如果string文字驻留在堆上,他们什么时候分配?