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. 1 つのアイテムのメモリ要件は、その有効期間中に変化する可能性がありますか?

ユーザーがどのくらいのスペースを割り当てるかを知ることができ、データがスペース要件を変更しない場合、ユーザーまたはライブラリのいずれかがメモリを管理することは許容されます

これらの点のいずれかが当てはまらない場合は、図書館がスペースを管理するのが最善です。そうしないと、メモリを管理するためにユーザーとライブラリの間で追加の通信が必要になります。最初のケースでは、必要なスペースの量を確認し、2 番目のケースでは、ユーザーがさらにスペースを割り当てるまで、要求された操作をライブラリが実行できないことを示します。

于 2013-10-07T20:25:25.163 に答える
0

内部 lib アロケーターまたはユーザー定義アロケーターをユーザーが選択できるようにします。

于 2013-10-07T19:33:50.403 に答える