【问题标题】:C/C++ Dynamic or Static memory allocation?C/C++ 动态或静态内存分配?
【发布时间】:2015-04-24 02:11:05
【问题描述】:

C/C++ 中的动态内存分配通过malloc 和静态内存分配例如:int a[3]; 在代码执行后分配。

但是这段代码int x[y+1]; 只能在一个值被赋予 y 之后发生并且这发生在执行时间,所以它是静态的、动态的还是两者兼而有之?编译器会自动在机器码中插入malloc吗?

【问题讨论】:

  • 旁注:int x[y+1] 不是有效的 C++(尽管大多数编译器都支持),它仅在 C 中有效。

标签: c++ c memory


【解决方案1】:

它是一个可变长度数组 (VLA)。维基百科:http://en.wikipedia.org/wiki/Variable-length_array

从技术上讲,它在 C++ 中是不合法的,但编译器通常支持它作为扩展,但在打开时会生成警告。看 Why aren't variable-length arrays part of the C++ standard?

在 C 中是合法的。

【讨论】:

【解决方案2】:

int[] 在堆栈上,而 malloc'd 或 new'd 的东西在堆上。

基本上int[] 在到达时自动分配(其中 y 已知)并在超出范围时被丢弃。它不是在启动时已经分配的所有内容。

没有隐藏的malloc 调用或其他东西,这就是堆栈内存的工作方式。

(希望有真正懂C/C++的人来解答)

【讨论】:

    猜你喜欢
    • 2016-02-03
    • 2015-07-23
    • 2015-02-27
    • 2015-10-22
    • 2015-12-07
    • 2015-06-27
    • 2021-02-28
    • 2012-01-20
    • 1970-01-01
    相关资源
    最近更新 更多