这被认为是动态内存分配吗?

时间:2017-02-19 17:15:42

标签: c++ visual-c++

int a;
cin >> a;
int n[a];

当我使用Visual Studio时,程序没有编译并报告错误。但是当我使用终端编译程序时没有任何问题。为什么会这样?这被认为是动态内存分配?

1 个答案:

答案 0 :(得分:10)

没有。这在C++11C++14中不合法。您正在使用名为variable length array的扩展程序(编译器提供了一些但不是全部)。

此外,VLA不适用于大型阵列 - 例如几百万个组件 - 因为在实践中你的call stack是有限的(例如一个兆字节或几个)

Dynamic memory allocation内部使用new(或malloc)之类的内容。它会更改您的流程的virtual address space(例如system calls,如mmap,在Linux上,有时会被new调用;在Windows上会使用不同的内容。)。

使用动态内存的一种好的(并且符合标准的)方法是使用一些standard container,例如std::vector。它的数据将被堆分配(并由向量' s destructor发布)。