malloc用户缓冲区在哪里?用户代码或库代码?

时间:2013-10-07 19:31:27

标签: c malloc

我正在编写一个将被许多应用程序使用的库。 是否有一种分配缓冲区的首选方法? 用户应该在主应用程序中进行malloc吗?或者库函数malloc应该吗?请注意,性能或空间使用不是问题。我从开发API的良好设计角度提出了更多要求。

[1]应用程序分配缓冲区空间:

int main()
{
   char **abc = malloc (1024*sizeof(char*));
   abc[0] = malloc ..
   abc[1] = malloc ..

   foo(abc);
   free_all(abc);
}

/*================================*/

//external API
void foo(char **abc) {
    strncpy(abc[0], "hello\0", 6);
    strncpy(abc[1], "world\0", 6);
    //and so on
}

[2]库函数mallocs缓冲区

int main()
{
    char **abc = NULL;
    foo(&abc);
    free_all(abc);
}

/*================================*/

//external API
void foo(char ***abc)
{
    int num_elem = 32;
    *abc = malloc (num_elem * sizeof(char*));
    (*abc)[0] = malloc(6);
    (*abc)[1] = malloc(6); //and so on
    strncpy( (*abc)[0], "hello\0", 6);
    strncpy( (*abc)[1], "world\0", 6);
    //and so on
}

2 个答案:

答案 0 :(得分:1)

考虑:

  1. 用户是否能够确定需要多少内存?
  2. 一个项目的内存需求在其生命周期内是否会发生变化?
  3. 如果用户可以知道要分配多少空间并且数据不会改变空间要求,那么用户或库可以管理内存

    如果其中一个不正确,那么图书馆最好管理空间。否则将需要用户和库之间的额外通信来管理存储器。在第一种情况下,找出需要多少空间,在第二种情况下,指示库在用户分配更多空间之前无法执行请求的操作。

答案 1 :(得分:0)

让用户选择:内部lib分配器或用户定义的分配器。