lua で単純なゲームのレベル エディターを作成しています。タイルは 2 次元配列の整数で表されます。ファイルからレベルの説明を読み取ると、この 2 次元配列がまばらに読み込まれることがあります。メモリを管理しますか?それらの穴を配列に保持しますか、それとも賢く、スペースを無駄にしませんか?
1 に答える
質問自体は実際的な意味では無関係です。次の2つのケースのいずれかがあります。
- タイルマップはかなり小さいです。
- タイルマップは十分に大きいため、メモリの制約に合わせるには圧縮が重要です。
#1の場合は、気にする必要はありません。タイルマップはそれが問題になるほど大きくないので、Luaがどれほどメモリ効率が良いかどうかは関係ありません。
#2の場合は、どちらも気にする必要はありません。なんで?メモリへの適合が重要であり、不足する可能性がある場合は、Luaがアレイのメモリを管理する方法の気まぐれに任せるべきではありません。
メモリが重要な場合は、Luaが使用できる特殊なデータ構造を構築する必要がありますが、Cで記述されています。これにより、メモリ管理を明示的に制御できます。したがって、タイルマップは、選択したメモリと同じかそれより少ないメモリを使用します。
実際の質問に関しては、それはむしろあなたがあなたの「配列」をどのように構築するかに依存します。Luaテーブルは本質的に連想配列ですが、その実装は「配列部分」と「テーブル部分」に分かれています。ただし、一般に、要素をまばらに格納すると、要素はメモリにまばらに格納されます(「スパース」の定義の場合)。あなたが次のような愚かなことをしない限り:
for i = 1, max_table_size do
my_tilemap[i] = 0
end
繰り返しになりますが、パフォーマンス上の理由からこれを実行することをお勧めします。これにより、スパーステーブルではなく大きな配列を使用できるようになります。配列要素は値ではなく参照であるため、要素ごとに16バイトしか使用しません。エントリ(実際のタイル)に実際の何かを入れることにした場合は、それが可能です。この場合、配列へのインデックス作成は高速になりますが、テーブル部分はハッシュテーブルであるため、正確に低速ではありません。