我正在编写一个将被许多应用程序使用的库。 是否有一种分配缓冲区的首选方法? 用户应该在主应用程序中进行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
}
答案 0 :(得分:1)
考虑:
如果用户可以知道要分配多少空间并且数据不会改变空间要求,那么用户或库可以管理内存
如果其中一个不正确,那么图书馆最好管理空间。否则将需要用户和库之间的额外通信来管理存储器。在第一种情况下,找出需要多少空间,在第二种情况下,指示库在用户分配更多空间之前无法执行请求的操作。
答案 1 :(得分:0)
让用户选择:内部lib分配器或用户定义的分配器。