[英]C++ memory allocation in arrays
int m,n;
cin>>m>>n;
int A[m][n];
问题是:数组A将在C ++中的堆栈上获得内存吗?
编辑:我知道使用new是更好的方法。 该技术在我的mingw g ++编译器中有效。 我只是好奇。
此行为取决于特定的编译器,而不是标准的一部分 。
在mingw
是其端口的gcc
,用于automatic variables
(包括variable lengths arrays
)的内存在堆栈上分配。
根据gcc
手册:
6.19可变长度的数组
[...]这些数组的声明与其他任何自动数组一样,但是其长度不是常量表达式。 存储在声明时分配,并在包含声明的块作用域退出时释放。 [...]您可以使用alloca函数来获得类似于可变长度数组的效果。
参考: https : //gcc.gnu.org/onlinedocs/gcc/Variable-Length.html
根据man 3 alloca
说法:
由alloca()分配的空间在堆栈帧内分配
请记住:
ISO C ++ 禁止使用可变长度数组
另外,您可以动态分配数组(使用new
),或者最好尽可能使用C ++容器。
编辑:基于Paul的注释,增加了关于编译器之间变量行为的注释。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.