gpt4 book ai didi

c# - 带文字字符串的数组

转载 作者:行者123 更新时间:2023-11-30 20:42:38 26 4
gpt4 key购买 nike

我有一个 string 数组,用下面的文字字符串初始化:

public static void Main()
{
string[] values = new string[] { "Cat", "Dog", "Mouse", "Rat" };
}

所以我们在栈和堆上有以下结构:

OnStack:一个变量 values 保存对堆上字符串数组的引用。

OnHeap:栈上values引用的字符串数组


但是堆上数组的每个元素的内容是什么?

  1. Actual string literals ?
  2. References pointing to string literals in intern pool ?

编辑: 该问题被指向 this question 重复.但我的情况在以下方面有所不同

  1. 另一个问题是关于作为数组元素的值类型如何表现的上下文,这表明问题提出者不清楚如何在堆栈/堆上分配 ref/val 类型对象。
  2. 在我的问题中,我很清楚 ref/val 类型元素是如何在堆栈或堆上分配的,但我讨论的是对象是字符串文字的特殊情况。因为那必须处理实习生池和 GC。

最佳答案

在这种特殊情况下,考虑到 Microsoft .NET CLR(这仅对 values 的位置很重要,如果在堆栈或堆中),您将有 5 个对 5 个对象的引用。

准确地说,您有一个 string 数组(1 个对象),这是一个对 string 的引用数组(另外 4 个对象)。

五个引用文献是:

  • values(在本例中是在堆栈上)
  • 4x 对 4x interned string 的引用(包含在堆上,在 string[] 数组中)

这五个对象是:

  • string[] 数组,包含在堆中
  • 4x string 对象被 interned,但它们仍然是完全成熟的 object,唯一的区别是 GC 永远不会释放它们(除非它们的 AppDomain 已卸载)

原来如此

References pointing to string literals in intern pool ?

关于c# - 带文字字符串的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31177862/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com