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