c - 2 次方大小数据的性能优势?

标签 c arrays performance memory-management

如果我有一个具有 3D 世界的游戏,并且这个世界很大,所以需要分成 block ,如果有的话,128 字节的 block 比 150 字节的 block 是否有主要的性能优势?显然,chunks中的objects仍然是整数字节大小。

chunks[128][128][128]chunks[150][150][150]chunks[112][112][112 快吗]?之后是否还有其他副作用,例如过多的 RAM 浪费?还有其他需要考虑的因素吗?

我只是看到将所有内容存储在变量和大小为 2 的幂的数组中是一种惯例,但我不确定它是否有任何优点,以及使用更多的人类数字是否会更好,例如100 或 150。

最佳答案

其他答案确实是正确的,即二次方大小的数据将受益于使用移位而不是乘法。

但是,二次方大小的数据也有阴暗面。它会在您最意想不到的时候打击您。

查看这两个问题/答案:

当您的数据集是二次幂时,它们更有可能在内存中超对齐。 (这意味着他们的地址很可能在 2 的大幂次方上具有相同的模数。)

虽然这看起来很可取,但它们可能会导致:

如果您阅读上面链接的两个问题,您会发现对齐会导致速度降低 3 倍以上 - 这可能远远超过权重您从使用移位而不是乘法中获得的任何好处。


因此,与所有性能问题一样,您需要衡量、衡量、衡量...并准备好期待任何事情发生。

您提到您正在代表一个 3D 空间 - 这正是那种会表现出可能导致速度减慢的二次幂内存访问的情况。

关于c - 2 次方大小数据的性能优势?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9515482/

相关文章:

c - 如何反转十六进制数的字节?

c - 在 C 中使用 zlib

javascript - 从另一个元素中过滤一个二维数组

php - 总是运行删除查询更有效,还是先检查该信息是否存在?

c - 使用 while 循环进行字母移位

C 编码 : Create Char Array, 打印、重新组织并再次打印

javascript - 搜索数组时出现问题

c - 在二维数组中分配内存时出现问题

php - SplFixedArray 的性能真的比数组好吗?

ios - 如何找出高能和cpu影响的原因?