c# - C#数组如何处理内存?

标签 c# .net memory low-level

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 为每个元素存储“元”信息... 还是我错了?

最佳答案

StringObject引用类型,即数组 string[] 和 object[] 包含对数据的引用,而不是数据本身。

引用具有固定大小(32 位或 64 位,具体取决于处理器架构)。

关于c# - C#数组如何处理内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53809292/

相关文章:

c# - 无法加载文件或程序集 System.Web.Mvc

C# - 将对象转换为画笔 (WPF)

c# - ChromeDriver C# 禁用开发者扩展 selenium

.net - F# 和 .Net 版本

c# - ASP.NET 页面跟踪结果

c# - 在非 UI 线程上运行模态对话框

c# - 如何保留列表的最新 X 元素

c - 信号 SIGTRAP 免费崩溃

c# - 如何在最后一个列表中插入元素?

c# - 需要会占用系统内存的 C# 代码。