3

在 C# 中,我可以做这样的事情

class Map {    
    public Tile[, ,] Location = new Tile[6, 256, 256];
}

然后使用类似的东西访问任何 Tile 元素Location[2, 40, 20]

我试图在 Rust 中制作类似类型的结构,但我发现语法有点奇怪。我确实想出了这个,但是它出现了大向量大小的段错误(用完了堆栈?):

use tile::Tile // Simple struct with a few Point properties

pub struct Map {
    location: [[[Tile, ..256], ..256], ..6],
}

pub impl Map {
    fn new() -> Map {
        Map {
            // assuming empty_tile is a Tile I've just created
            location: [[[empty_tile, ..256], ..256], ..6]
        }
    }
}

我做错了吗?它运行得非常缓慢,并且大尺寸出现了段错误。也许有更好的方法来存储瓷砖的三维空间(层、宽度、高度)?

编辑:这是在我什至尝试使这些 Tiles 可变之前

4

1 回答 1

4

[[[Tile, ..256], ..256], ..6]是堆栈分配的,它可能有 60MB 大。Try ~[~[~[Tile, ..256], ..256], ..6],这是一个拥有的指针(分配在发送堆上,拥有的指针可以跨任务发送)

于 2013-05-17T06:00:23.910 回答