在C+中使用动态大小的阵列时的性能+;MSVC与GCC 今天,在一个相当关键的C++块中,下面的代码行出现了一个小争论。 void func(std::string& str) { ... uint8_t buffer[str.size() + 10]; ... }

在C+中使用动态大小的阵列时的性能+;MSVC与GCC 今天,在一个相当关键的C++块中,下面的代码行出现了一个小争论。 void func(std::string& str) { ... uint8_t buffer[str.size() + 10]; ... },c++,gcc,memory,C++,Gcc,Memory,现在很明显,您可以在C中编译它,因为标准支持动态大小的数组。然而,GCC C++似乎允许通过某种扩展来构造这种结构。MSVC不允许这种说法,所以我们有点困惑 GCC是否在声明时分配它?这个分配是在堆栈上完成的吗?它是动态分配的语法糖吗,比如说使用new创建数组 如果在序言中分配一个静态数组,那么在静态数组之上使用动态大小的数组是否会有性能损失 “很明显,这是一个动态大小的数组,不能用C语言编译。”据我所知,这是错误的。根据标准,VLA在C中是允许的。它们在C++中是不允许的,但是一些编译器(例

现在很明显,您可以在C中编译它,因为标准支持动态大小的数组。然而,GCC C++似乎允许通过某种扩展来构造这种结构。MSVC不允许这种说法,所以我们有点困惑

  • GCC是否在声明时分配它?这个分配是在堆栈上完成的吗?它是动态分配的语法糖吗,比如说使用new创建数组

  • 如果在序言中分配一个静态数组,那么在静态数组之上使用动态大小的数组是否会有性能损失

“很明显,这是一个动态大小的数组,不能用C语言编译。”据我所知,这是错误的。根据标准,VLA在C中是允许的。它们在C++中是不允许的,但是一些编译器(例如GCC)提供了扩展,允许扩展这种行为(我可以猜到:使用与C中的一个实现相同的方法)。