不推荐基于堆栈的分配?
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),在堆栈上分配大量存储空间可能会溢出。
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),在堆栈上分配大量存储空间可能会溢出。