c#使用对象数组来存储上述对象的指针

本文关键字:对象 指针 存储 数组 | 更新日期: 2023-09-27 18:01:25

肯定有这样一个问题,但我找不到它-也许我措辞错误。我所有的搜索都指向了关于如何在c#中使用数组的文章。

一点背景知识:我正在尝试将许多对象加载到数组中。我想知道数组是否会因为指针太多或数组中累积对象的大小而导致OutOfMemory异常。我知道对象在。net中有一个固有的2gb大小限制,但它是否源于数组中的对象本身?

例如,如果数组中有n个对象,该数组的内存大小是n * sizeof(object)还是n * sizeof(pointer)?

c#使用对象数组来存储上述对象的指针

如果对象是值类型,那么它将实际对象存储在数组中,数组的大小是n *对象的大小。如果类型是引用类型,则数组存储对其他地方对象的引用,数组的大小为n *指针的大小。

数组仅由N个元素类型的槽组成。如果元素类型是引用类型,则数组存储引用(最初都是null)。对于ref和value类型的元素没有特殊情况。

逻辑上,数组不可能包含引用类型对象"inline"。如果这些类没有默认构造函数怎么办?

如果您担心OutOfMemoryException,请参阅这里的答案:https://stackoverflow.com/a/1088044/87464

也就是说,一个2GB的引用类型数组,即使是在64位上系统,就是大量的对象。即使有8字节的引用,你有能力分配268,435,456个对象引用的数组- 每个都可以非常大(最多2GB,如果使用嵌套对象则更多)。这比实际需要的内存要多

.NET公共语言运行时团队的一名成员发表了一篇关于数组的内存限制http://blogs.msdn.com/b/joshwil/archive/2005/08/10/450202.aspx和使用BigArray绕过任何大小限制的深入博客