1

我正在为 lua 中的一个简单游戏制作关卡编辑器,并且图块由 2d 数组中的整数表示,当我从文件中读取关卡描述时,可能会发生这个 2d 数组填充稀疏的情况,lua 如何管理内存?它会保留阵列中的这些孔,还是会很聪明而不浪费任何空间?

4

1 回答 1

3

这个问题本身在实际意义上是无关紧要的。您有以下两种情况之一:

  1. 您的瓷砖地图相当小。
  2. 您的 tilemap 足够大,因此压缩对于适应内存限制很重要。

如果#1是这种情况,那么你不应该关心。Lua 的内存效率有多高并不重要,因为你的 tilemaps 不够大,以至于它根本不重要。

如果#2是这种情况,那么您也不应该在意。为什么?因为如果适合内存对您很重要,并且您可能会用完,那么您不应该让 Lua 碰巧管理数组内存的方式变幻莫测。

如果内存很重要,您应该构建一个 Lua 可以使用但用 C 编写的专用数据结构。这样,您可以显式控制内存管理;因此,您的瓷砖地图将占用您选择的内存。

至于实际问题,这取决于您如何构建“数组”。Lua 表本质上是关联数组,但它们的实现分为“数组部分”和“表部分”。一般来说,如果你稀疏地存储元素,那么元素将稀疏地存储在内存中(对于“稀疏”的某些定义)。只要你不做一些愚蠢的事情,比如:

for i = 1, max_table_size do
  my_tilemap[i] = 0
end

再说一次,出于性能原因,您可能希望这样做。这可确保您拥有一个大数组而不是一个稀疏表。由于数组元素是引用而不是值,因此每个元素可能只占用 16 个字节。一旦你决定在一个条目(一个实际的瓷砖)中放置一些真实的东西,你就可以。在这种情况下,对数组的索引会很快,但由于表部分是一个哈希表,它并不是很慢。

于 2012-09-02T00:43:59.397 回答