C - 动态分配单个结构的优点

时间:2015-10-01 04:28:57

标签: c struct

我最近一直在浏览一些C代码并注意到有些人编写函数来动态分配和初始化C结构,例如。

struct pool {
    /* ... */
};

struct pool *pool_new(/* ... */)
{
     struct pool *p = calloc(1, sizeof(*p));
     /* initialise p ... */
     return p;
}

我不确定这是否是一种好的做法,因为这种定义强制使用动态分配,并可能导致不必要的内存碎片。我知道这可能是定义不透明对象的方法,但我已经看到了这种代码用于" normal"结构也是如此。这种做法有什么好处?

1 个答案:

答案 0 :(得分:2)

动态过度静态分配的一个原因是对象的可移植性。堆栈分配的对象只能通过指针向下传递,永远不会向上传递,而堆分配的指针可以随意传递。

堆栈通常也比堆小,所以如果结构占用了很多ram,那么堆分配它们会更好。

使用分配功能还可以确保正确填写某些字段,尤其重要的是,如果这些字段是从结构中的其他值计算的,并且您不希望在任何地方复制这些计算。 / p>