嵌套结构的首选分配

时间:2016-05-14 15:09:11

标签: c memory struct malloc c11

在嵌套层次结构中动态分配“内部”结构是否更可取?如果父结构是动态分配的,那么它是否重要?为什么/如何重要?只是试图建立我对不同的,看似矛盾的方式的含义的理解,在我正在处理的代码库中处理内存。

例如,有什么好处:

struct Foo_type {
  int i;
}; typedef struct Foo_type Foo;

struct Bar_type {
  Foo f;
}; typedef struct Bar_type Bar;

int main() {
  Bar* b = malloc(sizeof(Bar));

  /* yada yada yada */

  free(b);
  return 0;
}

相反:

struct Foo_type {
  int i;
}; typedef struct Foo_type Foo;

struct Bar_type {
  Foo* f;
}; typedef struct Bar_type Bar;

int main() {
  Bar* b = malloc(sizeof(Bar));
  b->f = malloc(sizeof(Foo));

  /* yada yada yada */

  free(b->f);
  free(b);
  return 0;
}

它们是等同/不同的吗?

2 个答案:

答案 0 :(得分:1)

作为@AndersK的补充。回答,第一种方法(非动态)是我们想要模仿继承,在派生的override func shouldAutorotate() -> Bool { return false // adjust this } 中声明基类struct并将派生的基础转换为基数的首选方法(

struct

答案 1 :(得分:0)

在第一种情况下,结构包含在一个内存分配块中,因此您可以对其进行memcpy,只需要一个可以释放它。

如果两个你占用两个内存块不一定彼此相邻,那么你将有额外的麻烦来跟踪这两个块。

如果你开始在Bar_type中有更多的指针和成员,你将增加复制该类型实例的复杂性。