按副本或引用排队

时间:2018-06-18 15:00:45

标签: c freertos

有两种方法可以实现队列行为:

  1. 按副本排队 按副本排队意味着发送到队列的数据被逐字节复制到 队列中。

  2. 按引用排队 通过引用排队意味着队列只保存指向发送给的数据的指针 队列,而不是数据本身。

  3. 我想询问是否通过复制排队包含指针的结构将创建副本或直接访问指向的内存。 谢谢。

1 个答案:

答案 0 :(得分:2)

你的问题的答案是依赖。

假设下一个结构:

M

将结构的一个实例分配给另一个实例时,将复制源,但它是浅层副本。

一般情况下,当内部指针指向动态分配的块,并且唯一指向分配的指针在struct中时,我会说它需要深层复制,如果只是分配内存可能会泄漏......

在某些情况下,浅拷贝就足够了:

master

如果将一个实例复制到另一个实例,则内存不会泄漏,因为所有指针都保存在字典中。  

在其他情况下它没有,所以你应该执行深度复制,主要是在一个实例中释放struct成员并且你不希望它影响另一个实例时。

如下所示:

struct a_t
{
  int id;
  char *name;
};