【发布时间】:2012-03-20 22:15:18
【问题描述】:
我有一个 3D 游戏,其中对象存储在 3D 数组中。每个对象都是一个相对较大的struct(几兆字节,准确地说是 4,194,304 字节)。
如果我将它们存储为原始值数组:gameObject objects[64][64][8],它们都存储在一个地方,但每个对象都被分配,无论是否使用它。
但是,如果我将数组分配为指针数组:gameObject *objects[64][64][8],则在需要之前不会分配未使用的对象(可能超过整个数组的一半),从而减少内存影响,但可能会更慢,因为对象遍布内存
考虑到性能和内存使用之间的权衡,哪种方法最好?我的担忧有效吗?
【问题讨论】:
-
“几个字节”是多少?一个指针在 x86_64 上是 8 个字节,我认为这也是一些
-
抱歉,刚刚意识到我在查看代码的错误部分;)。它更像是几个 百万 字节。
-
“考虑性能和内存使用之间的权衡”在您进行测量之前,您所做的任何事情都是无关紧要的。
-
您将无法分配 200 万个对象,每个对象有 400 万字节的存储空间,因为它需要 8 TB 的 RAM。所以答案是:你需要通过动态分配来做到这一点。
-
在开发软件时,有时能够估计四个数字的乘积是一个优势。对于您修改后的问题,您仍然需要 128 GB 的 RAM。可能在 iPhone 10 中。
标签: c arrays performance memory-management