【问题标题】:Can alloca () be replacement for auto pointers in C++?alloca() 可以替代 C++ 中的自动指针吗?
【发布时间】:2014-07-03 12:56:29
【问题描述】:

alloca () 用于从堆栈分配内存,堆栈在到达作用域末尾时自动释放。同时,C++ 中的自动指针确保在堆栈缠绕期间自动释放堆中动态分配的内存。

说 alloca() 提供了与自动指针提供的类似的自动回收功能是否正确?

【问题讨论】:

  • 你的前提是错误的。 alloca 分配的内存在周围的函数结束时被释放。
  • alloca 不可移植,它既不是 C、POSIX 也不是任何其他标准的一部分,它依赖于编译器。应避免使用它。当然,即使在函数结束时“自动”地未分配内存,它也不会(就像malloc)在分配/释放时调用任何构造函数或析构函数。

标签: c++ stack dynamic-memory-allocation


【解决方案1】:

不,一点也不,那是完全错误的。 C++ 中智能指针(unique_ptr、shared_ptr 和旧的和已弃用的auto_ptr)的目的是在空闲存储上拥有内存分配,即用new 分配的对象(尽管有一些灵活性)。供应商特定的alloca 在调用堆栈上分配内存(不是对象),而不是在空闲存储上。

标准中与alloca 最接近的类似物是C 的可变长度数组,但C++ 甚至没有。即使这样,语义也不同,因为 C 和 C++ 中的名称是有作用域的,但 alloca 的语义并没有系统地与作用域相关联(而是与 函数 相关联)。如果您愿意,可以将alloca 视为提供“动态大小的局部变量”,但这种类比存在许多缺陷。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-30
    • 1970-01-01
    • 2011-02-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-14
    相关资源
    最近更新 更多