代码之家  ›  专栏  ›  技术社区  ›  Peter VARGA

不建议基于堆栈的分配?

  •  0
  • Peter VARGA  · 技术社区  · 9 年前

    这个 libmemcached documentation 有以下备注:

    您可能希望避免使用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);
    }
    
    1 回复  |  直到 9 年前
        1
  •  0
  •   EOF    9 年前

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

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