API 设计是告诉 API 的使用者分配内存的最佳做法

API Design is it best practice to tell the consumer of an API to allocate the memory?

本文关键字:API 内存 最佳 分配 使用者      更新时间:2023-10-16

我正在尝试用C语言实现一个应用软件。 我最终设计了多层。从每个层公开自己的 API,也可以调用另一个层的 API。

Example:
Layer 1:
      // invoking layer2 API.
      // allocating mystrcuture here
      getDetailsOf (mystructure);
Layer 2:
      getDetailsOf ( mystrcuture)
      {
             Fill up the details in mystrcuture, 
      }

我遵循了上述方法。另一种方法是将分配mystrcuture的责任释放给getDetailsOf()函数,并让他返回新分配的mystructure。

请帮助我,这是正确的做法?

在这种情况下,是的;我认为调用者应该分配内存(当然,您需要获取指向结构的指针)。 您知道所需的确切大小,那么为什么不让调用方按照他们认为合适的方式分配内存呢? 没有理由在这里强制实施动态分配。

编辑:这个答案是以C为中心的。 您应该在此处指定您正在谈论的语言。

由于C++允许返回一个可以处理其析构函数中内部部分的释放的对象,因此我假设您的问题与 C 兼容的 API 有关。

这两种方法都是可以接受的。如果 mystructure 足够简单(见下文),调用者应该处理分配和解除分配,并将指针传递给底层;如果它太复杂,被调用方应为其分配内存,并返回一个指针,当调用方不再需要它时,应释放该指针。

恕我直言,规则应该是如果所有必要的内存大小恒定或在调用之前知道,则分配应该是调用方的责任。如果不是这种情况,例如可变长度的 char 数组、任意大小的位图......,则应由被调用方负责。

为了

协调起见,如果您希望 API 的所有函数都使用相同的逻辑,则可以减轻此答案。