不推荐基于堆栈的分配?

Stack based allocation not recommended?

libmemcached documentation 有这条注释:

You may wish to avoid using memcached_create(3) or memcached_clone(3) with a stack based allocation. The most common issues related to ABI safety involve heap allocated structures.

我要怎么理解呢?在这种情况下 ABI 代表 Application Binary Interface?我想从局部函数作用域中的变量提供指向 memcached_clone() 结构的指针。安全吗?

示例 - 这段代码可以吗?

foo()
{
   memcached_st clone_memc;

   memcached_clone(&clone_memc, master_memc);

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

   memcached_free(&clone_memc);
}

是的,ABI 代表 application binary interface
我可以想到三个避免堆栈分配的原因。按相关性升序排列:

溢出时的堆栈粉碎 可能比堆溢出更容易利用。
分配的生命周期在创建函数的作用域离开时结束,不要记住这一点对于C初学者来说这是一个相当常见的错误。
堆栈大小限制 通常相当小 (~8kb),在堆栈上分配大量存储空间可能会溢出。