.NET堆栈内存限制

use*_*169 7 .net memory 64-bit stack limit

我使用的是C#,.NET 4.0,64位.我需要在内存中存储5亿个用于计算的"数据点".我需要决定是将它们创建为struct还是class对象.结构似乎更快.

堆栈是否有内存限制?如果是这样,如何调整.

将大量数据存储在堆栈中是否会影响系统的整体性能?

(顺便说一句,我知道.NET中的单个对象大小限制,因此正在解决 - 数据将存储在多个集合中).

Cod*_*aos 6

你问的是错误的问题.如果堆栈大小很重要,那么你做错了什么.

如果使用许多数据点,则将它们放在一个集合中,例如数组.总是在堆上分配数组.结构数组嵌入各个结构并形成连续的内存块.(如果你有超过2GB,你需要几个数组).

而对于引用类型,数组将只包含引用,并且对象在堆上单独分配.堆分配有大约16个字节的开销,数组中的引用占另外8个.
由于间接性,你也会得到更糟糕的缓存局部性,并且GC必须做更多的工作,来抓取所有这些引用.

我的结论是,如果你有许多小数据点,那么将它们作为结构,并将它们放在一个数组中.