C 不建议基于堆栈的分配?

C 不建议基于堆栈的分配?,c,abi,libmemcached,C,Abi,Libmemcached,委员会注意到: 您可能希望避免使用memcached_create3或memcached_clone3 使用基于堆栈的分配。与ABI相关的最常见问题 安全性涉及堆分配的结构 我该如何理解它?在本例中代表应用程序二进制接口的ABI?我想从本地函数作用域中的变量提供指向memcached\u clone结构的指针。安全吗 示例-这段代码可以吗 foo() { memcached_st clone_memc; memcached_clone(&clone_memc, master

委员会注意到:

您可能希望避免使用memcached_create3或memcached_clone3 使用基于堆栈的分配。与ABI相关的最常见问题 安全性涉及堆分配的结构

我该如何理解它?在本例中代表应用程序二进制接口的ABI?我想从本地函数作用域中的变量提供指向memcached\u clone结构的指针。安全吗

示例-这段代码可以吗

foo()
{
   memcached_st clone_memc;

   memcached_clone(&clone_memc, master_memc);

   // some memcache function calls (get/set)
   ...

   memcached_free(&clone_memc);
}

是的,ABI代表应用程序二进制接口。我可以想出三个避免堆栈分配的原因。按照相关性的升序:溢出时的堆栈破坏可能比堆溢出更容易利用。分配的生命周期在创建函数的作用域离开时结束,但不要忘记这一点。对于C初学者来说,这是一个相当常见的错误。堆栈大小限制通常很小,约为8kb,在堆栈上分配大量的内存可能会溢出它。

它对我没有影响。这个问题被问到,因为我在MySQL UDF中使用MycCurp,一旦被用于C++,在纯C中编写是一件痛苦的事。