0

libmemcached 文档有这个注释:

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

我该如何理解它?在这种情况下,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);
}
4

1 回答 1

0

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

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

于 2015-03-30T12:38:41.007 回答