C# 中的数组只是一 block 连续的内存,就像在任何其他语言中一样。
默认情况下,在 T[]
处按索引操作获取元素将花费 O(1),因为计算 index * sizeof(T)
。但这只有在我们知道 sizeof(T)
时才有效。
所以我试图打破它:
var sampleArray = new string[10];
sampleArray[0] = "1";
sampleArray[1] = "2";
var objectArray = (object[]) sampleArray;
objectArray[2] = 42;
并且可以预测得到运行时 System.ArrayTypeMismatchException
。
好的,但是今天我发现了这个例子:
var arr = new[] { new object[] { new[] { 1 }, 2, "3" } };
var someValue = arr[0][1];
并且这个例子是无异常编译运行的。
为什么?
如果元素不同,对象数组如何知道任何元素的大小?
在底层如何处理不同长度的字符串?
我不认为 Array
为每个元素存储“元”信息...
还是我错了?
最佳答案
String
和 Object
是引用类型,即数组 string[] 和 object[] 包含对数据的引用,而不是数据本身。
引用具有固定大小(32 位或 64 位,具体取决于处理器架构)。
关于c# - C#数组如何处理内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53809292/