这个问题可能过于宽泛,或者观点偏颇,但我知道这个网站充满了经验丰富的程序员,我认为它可能会鼓励一个很好的讨论。
我正在用 C 实现一个嵌入式应用程序,其中我使用了一个包含结构的链表:
struct my
{
uint16_t x;
uint16_t y;
char *text;
struct my *next;
struct my *prev;
};
总的来说它工作得很好,但是在现在的项目中,我正在转向 MISRA-C 编程指南。MISRA 禁止使用任何动态数据结构,因为它可能会在内存有限的嵌入式系统中导致未指定的行为。
我首先想到的当然是一个经典的静态结构数组,具有固定的大小。这个结构体的实例永远不会超过 30 个,而且我们仍然只使用了不到 5% 的可用内存,因此即使没有使用所有这些内存,也不会影响我们的程序性能。像这样:
extern struct my arr[30];
然而,这种方法有一些困难,例如,有时我需要从列表中删除一个元素,然后它会留下一个空元素,迫使我用一个索引重写所有其他元素。
是否有任何干净、优雅的方式来实现类似于链表的功能,而不使用它们?