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