我正在构建一个体素引擎,所以我担心内存使用情况,使用12位而不是16位块ID可以节省大量内存。我有一个块ID的3D数组,每个id都有一个静态配置。
我不确定实现这一目标的好方法是什么。有没有办法只获得一块原始内存并自己管理它,这是一个好主意;我可能遇到任何问题吗?有更好的方法吗?
我对c ++有一些经验,但我的大部分时间都花在了Java和c#上。
感谢阅读!
答案 0 :(得分:5)
有可能,例如: -
char[k]
k
ceiling{(12*n)/8.0f}
保留,然后使用工会等.... 这是一个链接(我是问的人),我学习了如何在一个块中分配内存 How to use void* as a single variable holder? (Ex. void* raw=SomeClass() )
但是,我对你想要做的事情略有不同意见。
据我所知,您的方法的缺点是: -
传统推荐:在之前(过早地)对其进行优化。
答案 1 :(得分:0)
以下是其他一些想法:
和/或比块类型更好的想法:
oct-tree的理论最大内存比blockID的实体块多一点,但实际使用将具有大的区域,实际上是固体块类型(例如空气)。渲染一个oct-tree会更快,因为你可以跳过任何空白节点,比单步执行所有切片以检查它们是否为空。
您可以创建一个包装器,以便oct-tree可以与完全定义的blockID的3D数组互换,例如,您可以通过函数调用为任何节点提取blockID。然后添加函数来设置blockID,根据需要进行节点的拆分和合并。