C / C ++动态或静态内存分配?

时间:2015-04-24 02:11:05

标签: c++ c memory

C / C ++中的动态内存分配通过http://www.progeneticlagarita.com/css/styles.css和执行代码后分配的静态内存分配ex:malloc进行。

但是这个代码int a[3];只能在一个值归属于y之后才会发生,这会在执行时发生,所以它的静态,动态或两者兼而有之?编译器是否自动在机器代码中插入malloc?

3 个答案:

答案 0 :(得分:4)

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

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

在C中是合法的。

答案 1 :(得分:0)

0在堆栈中,而int[]' d或malloc' d堆在堆上。

非常基本new在到达时自动分配(其中y已知),并在超出范围时被删除。它不是在启动时已分配的所有内容。

没有隐藏的int[]调用或东西,这就是堆栈内存的工作原理。

(我希望得到实际了解C / C ++的人的回答)

答案 2 :(得分:-1)

当你想到它时,

int x[y+1]无法发生。您只能拥有int x[SOME_CONSTANT_HERE]。如果y被声明为const,那么这将起作用。

那是因为C / C ++中没有魔法 - 文件范围的项目只会在编译时分配,而本地项目会被推送和放弃。当它们进入和离开范围时(即,当执行进入并离开一个块时),弹出堆栈(如Felk所提到的)。但后者不是通过malloc()在你思考它的方式上进行动态分配;它是(用户)堆栈。

(注意:显然一些C99编译器会让你声明一个变量大小为的数组,如果数组是一个局部变量,那么在用户堆栈上创建。如果你肯定是一个错误但是,尝试使用文件范围的变量执行此操作。)