【问题标题】:alloca function in CC中的alloca函数
【发布时间】:2012-02-27 00:25:06
【问题描述】:

我正在修改 C 并遇到了 alloca/free 函数,它被描述为在堆栈上分配存储空间,如空间。这和 malloc/free 一样吗?或者这是不同的东西?谢谢。

【问题讨论】:

  • 以下链接表明alloc 是一个不同的功能:cboard.cprogramming.com/c-programming/…
  • 我认为你是对的。我认为这是他们的分配器示例实现..
  • 您正在修改 K&R?你一定很聪明。
  • 我知道它“有点”过时了,但不知道任何其他可以指导我了解基础知识的资源。有什么建议吗?

标签: c alloca


【解决方案1】:

为旧答案添加一些额外信息。

malloc() 可以使用的原因很少,其中一些是

  1. 动态内存分配
  2. 范围(当需要在函数调用之间保留内存时)

但是,malloc() 添加的一项额外工作是我们必须显式地free() 分配的内存。

因此,为了只使用动态内存分配功能,并避免free() 的开销,可以在他们的程序中使用alloca()。这之所以成为可能,是因为当使用alloca() 时,内存是在堆栈上分配的(如其他答案所述)。

【讨论】:

  • @NickA 我希望哈里斯做到了。无论如何我都修好了。
【解决方案2】:

malloccallocrealloc 函数在堆上分配空间。

free 函数“释放”这些函数先前分配的空间。

【讨论】:

    【解决方案3】:

    我认为您的意思是alloca 用于在堆栈上分配内存。是的,这与在堆上分配的mallocfree 不同。

    不要尝试释放用alloca 分配的内存,因为当调用alloca 的函数返回给它的调用者时,它会自动释放。

    使用alloca 和/或C99 可变长度数组可能是一项有风险的业务,因为如果您不谨慎地使用这些工具,很容易导致堆栈溢出。

    【讨论】:

    • 第三段怎么强调都不过分。使用 alloca 或 VLA 几乎没有安全的方法。
    猜你喜欢
    • 2014-07-20
    • 2011-10-16
    • 2016-12-02
    • 2012-01-28
    • 2014-07-12
    • 2017-06-14
    • 2011-01-20
    • 2020-12-05
    • 2014-04-15
    相关资源
    最近更新 更多