0

プロジェクトに次のラッパー関数を使用しています。いろいろなところに使わせていただきます。この関数を続行するか、代わりにマクロまたはインライン関数を使用するかについては、多くの場所で使用する予定であるため、疑問があります。このコードを小さな組み込みデバイスで使用する予定なので、誰かが最適なものを提案できますか? ここではラッパーを使用して、さまざまなプラットフォームでコードを移植できるようにしています。

void mem_deallocate(void **mem)
{
    assert(mem != NULL);

    if (*mem)
    {
        free(*mem);
        *mem = NULL;
    }
}


void *mem_allocate(size_t count, size_t size)
{
    void *mem = malloc(count * size);
    return mem;
}
4

1 に答える 1

1

free(ptr)ptrが の場合は何もしないので、関数を次のようにNULL削除できます。mem_deallocate()

void mem_deallocate(void **mem)
{
    assert(mem != NULL); 

    free(*mem);
    *mem = NULL;
}

ifこれにより、 ;による分岐がなくなります。関数の内容を非常に小さくします。コンテンツをインラインに配置するのではなく、これを関数として持つことのオーバーヘッドは、経験的にテストするのが最適です。

あなたもチェックイン後にmem_allocate()チェックしてみませんか?現在の形式では、使用するだけで実行する利点はありませんNULLmemmalloc

void *mem = malloc(count * size); 

関数を呼び出すことなく、コード内で直接実行できます。

于 2013-10-25T04:39:33.567 に答える