路由表实现:链表与数组

时间:2014-04-11 09:30:13

标签: data-structures routing arm

我正在尝试通过BTLE PHY和链路层实现自己的路由协议,以便为BTLE无线电提供多跳链路。我正在使用Cortex-M0处理器。我的路由表结构基本如下:

|Neighbour Address| Info about Link quality | Possible Destination Addr|

邻居地址将具有直接邻居的地址,并且可能的目的地地址字段将具有可以从该特定邻居到达的目的地(在一跳内)的地址(该路由仅支持2跳通信)。简而言之,可能的目的地将具有在邻居的邻居地址中的元素的条目。

我在C中使用CodeSorcery Toolchain Bare for ARM实现了这一点。那么,对于构建路由表,是应该使用链表还是数组?使用数组比实现链表更容易,但是,数组的大小将被预定义和限制。此外,在初始化时,它将占用专用于它的所有空间。为路由表保留空间是否真的很好,以便以后不会导致内存问题?或者它应该是链接列表,在数据分配方面更灵活?

1 个答案:

答案 0 :(得分:0)

最好的数据结构是两者兼顾。您可以在“块”中分配地址表。每个块将包含多个路由表条目和下一个指针。填满块之后,您可以分配下一个块并在前一个块下一个指针中填充它的地址。

这样的结构同时获得了两个世界,您可以获得简单的表扫描速度和链表的灵活性。

您的网络规模有多大?对于非常大的网络,简单表将是性能瓶颈,因此您应该考虑使用前缀的哈希表,这样您就不需要遍历整个表来查找特定的邻居。