c++ - 静态分配的可变大小数组如何在 C++ 中工作?

标签 c++ compiler-errors g++ dynamic-memory-allocation static-memory-allocation

#include <iostream>

    using namespace std;

    int main(int argc, const char * argv[])
    {

        int size;
        cin >> size;
        int myArray[size]; //this shouldn't compile , right ? 

        return 0;
    }

我以为这不会编译,但实际上它会编译(使用 g++ 命令)。

我后来发现 GCC 实际上允许可变大小数组,即使标准 C++ 不支持可变大小数组,这很奇怪!因为我听到每个人都说创建可变大小数组的唯一方法是使用动态分配,例如 int* array = new int[size]; 或更好的 std::vector。我以为 GCC 不允许那段代码!

无论如何,我的理论问题是,myArray 数组分配在 堆栈 区域?

最佳答案

那是编译器端的扩展。 它是如何工作的?嗯,它只在某种程度上起作用。

实现基本上将堆栈指针移动一个数量,该数量取决于数组的大小,并通过数组的名称调用中间的内存。它仅在某种程度上起作用,因为在 VLA 中,大小不是类型的组成部分,这意味着许多可用于常规数组的构造无法使用此类型完成,例如通过引用将数组传递给模板... sizeof 通常提供,但作为运行时构造实现。

关于c++ - 静态分配的可变大小数组如何在 C++ 中工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12485180/

相关文章:

c++ - 成员: bug in GCC or my thinking?的初始化

c++ - Visual C++ 2008 和 g++ 的区别

c++ - 我可以从 C++ 程序中调用 Objective-C 类吗?

compiler-errors - 为什么OCaml具有强制性的独特的float和int文字语法?

compiler-errors - 安卓 : Cannot resolve symbol 'compile'

C++:单例类设计(错误:未解析的外部符号)

c++ - 执行 N >= 10^7 的代码时出现段错误(核心转储)错误

c++ - 从 r-value ref-qualified 方法 move 还是不 move ?

c++ - 使用非相对路径的 'include' 语句的 g++ 编译 (C++)

c++ - 使用 GCC (G++) 编译 c++ OpenACC 并行 CPU 代码