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

malloc用户缓冲区在哪里?用户代码还是库代码?,c,malloc,C,Malloc,我正在编写一个库,它将被许多应用程序使用。 是否有分配缓冲区的首选方法? 用户是否应该在主应用程序中对其进行malloc?或者库函数应该对其进行malloc吗?请注意,性能或空间使用不是一个问题。对于开发API,我从良好的设计角度提出了更多要求 [1] 应用程序分配缓冲区空间: int main() { char **abc = malloc (1024*sizeof(char*)); abc[0] = malloc .. abc[1] = malloc .. foo(

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

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

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

考虑:

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

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

    请考虑:

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


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

    我必须开发API并告诉用户是否应该传递空指针或分配的缓冲区,所以我必须做出这个决定,或者做一个函数,比如接受分配器作为输入参数。正如您所看到的,有多种方法可以实现这一点。我必须开发API并告诉用户是否应该传递空指针或分配的缓冲区,因此我必须做出决定。例如,我必须创建一个函数,该函数将接受分配器作为输入参数。正如你所看到的,有各种各样的方法来实现这件事。如果它有帮助,请告诉我。如果它有帮助,请告诉我。