【发布时间】:2014-10-21 05:51:53
【问题描述】:
int a;
cin >> a;
int ints[a];
为什么编译时不会抛出任何警告?我怎么知道这个数组到底是在用堆还是栈?
g++ -std=c++11 -Wall *.cpp -o main
【问题讨论】:
-
我怎么知道这个数组的东西实际上是在使用堆还是堆栈? 很简单,如果你没有
new(或malloc)那么它就是在堆栈上。 -
不正确。我在这里所做的实际上是在不告诉我的情况下在堆中分配内存。因为我使用的是可变大小的数组,它不知道构建堆栈时的大小。
-
嗯,这是一种观点,然后你的编译器的文档又声称:gcc.gnu.org/onlinedocs/gcc/Variable-Length.html,另外看看
alloca的documentation 那也 在运行时在堆栈中分配空间。 -
虽然我确定您在实践中是对的,但要迂腐,GCC 文档在哪里说明了结果数组的存储位置?当然,存储 duration 是自动的,但这与位置正交。它可能会在现实中出现,但鉴于这是非标准行为,我认为没有必要这样做。再说一次,由于人们经常混淆这些概念,OP可能会或可能不会关心其中一个。 :P
标签: c++ memory g++ heap-memory