1

我正在编写一个将被许多应用程序使用的库。是否有分配缓冲区的首选方法?用户应该在主应用程序中对其进行 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
}
4

2 回答 2

1

考虑:

  1. 用户能否确定需要多少内存?
  2. 一个项目的内存需求可以在其生命周期内改变吗?

如果用户可以知道要分配多少空间并且数据不会改变空间要求,那么用户或库管理内存都是可以接受的

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

于 2013-10-07T20:25:25.163 回答
0

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

于 2013-10-07T19:33:50.403 回答