gpt4 book ai didi

c# - 为什么类数组消耗的内存比结构数组多 20%?

转载 作者:太空狗 更新时间:2023-10-29 20:59:13 25 4
gpt4 key购买 nike

我正在制作一款 2D 平台游戏,为了表示一个关卡,我使用了 2D 瓷砖阵列,这些瓷砖是具有位置、类型和各种标志字段的类。当我将 tile 类中的 class 关键字更改为 struct 时,加载的 map 消耗的内存减少了大约 20%。

我不知道这个 Action 的对错,我只想知道为什么内存消耗不同。

编辑:数字为 1038 MB,其中瓦片作为类,845 MB 作为结构(没有大部分游戏数据)。​​

最佳答案

对象数组实际上是一个引用数组,对象存储在堆上。

这意味着引用有 4 或 8 字节的开销(取决于 x86 或 x64),然后堆上的每个对象有 8 或 16 字节的开销。

在结构数组中,结构值直接存储在数组中,因此没有额外的开销。

因此,如果您的数据是例如 48 字节,额外的 12 字节(在 x86 模式下)将是所用总内存的 20% 的开销。

请注意,它们的使用方式也有所不同。如果您四处移动图 block 或将一个图 block 作为参数发送给方法,如果您使用结构,则将复制所有数据,但如果您使用类,则仅复制引用。如果您可以使结构小于 16 字节,则性能差异很小,但如果它更大,您可以通过使用类获得更快的代码。

关于c# - 为什么类数组消耗的内存比结构数组多 20%?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11975687/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com