相关疑难解决方法(0)

C API设计:谁应该分配?

在C API中分配内存的正确/首选方法是什么?

我首先看到两个选项:

1)让调用者完成所有(外部)内存处理:

myStruct *s = malloc(sizeof(s));
myStruct_init(s);

myStruct_foo(s);

myStruct_destroy(s);
free(s);
Run Code Online (Sandbox Code Playgroud)

该_init和_destroy功能是必需的,因为一些更多的内存可分配里面,而且必须在某个地方处理.

这样做的缺点是更长,但在某些情况下也可以消除malloc(例如,它可以传递给堆栈分配的结构:

int bar() {
    myStruct s;
    myStruct_init(&s);

    myStruct_foo(&s);

    myStruct_destroy(&s);
}
Run Code Online (Sandbox Code Playgroud)

此外,调用者必须知道结构的大小.

2)隐藏mallocs in _init和freein in _destroy.

优点:代码更短,因为无论如何都会调用函数.完全不透明的结构.

缺点:无法传递以不同方式分配的结构.

myStruct *s = myStruct_init();

myStruct_foo(s);

myStruct_destroy(foo);
Run Code Online (Sandbox Code Playgroud)

我目前正在倾向于第一个案例; 然后,我不知道C API设计.

c api malloc memory-management

52
推荐指数
4
解决办法
6852
查看次数

标签 统计

api ×1

c ×1

malloc ×1

memory-management ×1