Tan*_*gar 3 c++ visual-c++
int a; cin >> a; int n[a];
当我使用Visual Studio时,程序没有编译并报告错误.但是当我使用终端编译程序时没有任何问题.为什么会这样?这被认为是动态内存分配?
Bas*_*tch 10
不.这在C++ 11或C++ 14中是不合法的.您正在使用一个称为可变长度数组的扩展(编译器提供了一些但不是全部).
此外,VLA不适用于大型阵列 - 例如数百万个组件 - 因为在实践中您的调用堆栈是有限的(例如,一兆字节或几个)
动态内存分配在内部使用类似new(或malloc)的东西.它改变了进程的虚拟地址空间(通过系统调用,如Linux上的mmap,有时会被调用new;在Windows上使用不同的东西).
new
malloc
使用动态内存的一种好的(并且符合标准的)方法是使用一些标准容器,比如std::vector.它的数据将被堆分配(并由向量的析构函数释放).
std::vector
归档时间:
8 年,6 月 前
查看次数:
80 次
最近记录: