c# - 有两个相同的数组是否需要双倍的内存?

标签 c# .net arrays memory indexing

我在理解数组如何处理内存时遇到一些问题。我很不擅长用文字解释,所以我会写一些代码给你:)

string[] arr1 = new string[10];
string[] arr2 = new string[10];

/* Fill 'arr1' with random strings */

for(int i = 0; i < 10; i++)
{
        arr2[i] = arr1[i]
} 

这会占用 2 倍(arr1 和 arr2 中字符串的大小)内存吗?

最初答案对我来说似乎很明显“不”,但后来我记得那个数组及其所有元素都存储在大的连续内存块中以进行快速索引,所以目前我不知道:)

最佳答案

第一个数组包含十个对字符串的引用,因此需要内存来保存它们。这同样适用于第二个数组。

但是字符串是分开存储的。如果将字符串从一个数组复制到另一个数组,则不会分配额外的内存。

因此,在您的情况下,消耗的总内存为(忽略开销):

  • arr1 引用大小的 10 倍
  • arr2 引用大小的 10 倍
  • 一次10个字符串需要的内存

关于c# - 有两个相同的数组是否需要双倍的内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9244083/

相关文章:

c# - VS 2012 中的 C# 文件没有语法突出显示或智能感知

c - 使用 typedef 通过引用传递参数

c# - 在 C# 中的标签中显示全文

c# - 将 Microsoft.Build.BuildEngine.Engine 迁移到 Microsoft.Build.Evaluation.ProjectCollection

c# - 持久化队列以防止 C# 中的内存不足错误

c - c语言中的数组和函数

javascript - setTimeout 按值传递数组(在咖啡中)

c# - 如何将数据从 C# 传递到 C++(仅指针,无编码)

c# - 如果数据库尚不存在则创建

c# - 等待线程完成而不阻塞 UI 线程