不推荐基于堆栈的分配?

时间:2015-03-30 07:42:53

标签: c abi libmemcached

libmemcached documentation有这样的说明:

  

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

我如何理解它?在这种情况下,Application Binary Interface代表ABI?我想从本地函数作用域中的变量提供指向memcached_clone()结构的指针。这样安全吗?

示例 - 这段代码好吗?

foo()
{
   memcached_st clone_memc;

   memcached_clone(&clone_memc, master_memc);

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

   memcached_free(&clone_memc);
}

1 个答案:

答案 0 :(得分:0)

是的,ABI代表application binary interface。我可以想到避免堆栈分配的三个原因。按相关性的升序排列:第一个溢出的堆栈粉碎可能比堆溢出更容易利用。
分配的生命周期结束当保留创建函数的范围时,不考虑这一点,这对于C初学者来说是一个相当常见的错误。
堆栈大小限制通常相当小(~8kb),分配显着堆栈上的存储量可能会溢出。