C/C++ 动态或静态内存分配?
C/C++ Dynamic or Static memory allocation?
C/C++ 中的动态内存分配通过 malloc
发生,静态内存分配例如:int a[3];
在代码执行后分配。
但是这段代码 int x[y+1];
只能在将值归因于 y 之后发生,并且这发生在执行时,所以它是静态的、动态的还是两者兼而有之?编译器会自动在机器代码中插入 malloc 吗?
int[]
在堆栈上,而 malloc
或 new
的东西在堆上。
基本上 int[]
在到达时自动分配(其中 y 已知)并在超出范围时丢弃。并不是所有的东西都在启动时就已经分配好了。
没有隐藏的 malloc
调用或东西,这就是堆栈内存的工作方式。
(希望有懂的人回答C/C++)
它是一个可变长度数组 (VLA)。维基百科:http://en.wikipedia.org/wiki/Variable-length_array
从技术上讲,它在 C++ 中是不合法的,但编译器通常支持它作为扩展,但在打开时会生成警告。看
Why aren't variable-length arrays part of the C++ standard?
在 C 中是合法的。
C/C++ 中的动态内存分配通过 malloc
发生,静态内存分配例如:int a[3];
在代码执行后分配。
但是这段代码 int x[y+1];
只能在将值归因于 y 之后发生,并且这发生在执行时,所以它是静态的、动态的还是两者兼而有之?编译器会自动在机器代码中插入 malloc 吗?
int[]
在堆栈上,而 malloc
或 new
的东西在堆上。
基本上 int[]
在到达时自动分配(其中 y 已知)并在超出范围时丢弃。并不是所有的东西都在启动时就已经分配好了。
没有隐藏的 malloc
调用或东西,这就是堆栈内存的工作方式。
(希望有懂的人回答C/C++)
它是一个可变长度数组 (VLA)。维基百科:http://en.wikipedia.org/wiki/Variable-length_array
从技术上讲,它在 C++ 中是不合法的,但编译器通常支持它作为扩展,但在打开时会生成警告。看 Why aren't variable-length arrays part of the C++ standard?
在 C 中是合法的。