gpt4 book ai didi

数组中的 C++ 内存分配

转载 作者:行者123 更新时间:2023-11-27 22:55:14 25 4
gpt4 key购买 nike

    int m,n;
cin>>m>>n;
int A[m][n];

问题是:C++ 中数组 A 会在堆栈或堆上获取内存吗?

编辑:我知道使用 new 是更好的方法。该技术适用于我的 mingw g++ 编译器。我只是好奇。

最佳答案

此行为取决于特定的编译器并且不是标准的一部分

gcc 中,mingwautomatic variables 的一个端口,包括 可变长度数组 在堆栈上分配。

根据 gcc 手册:

6.19 Arrays of Variable Length

[...] These arrays are declared like any other automatic arrays, but with a length that is not a constant expression. The storage is allocated at the point of declaration and deallocated when the block scope containing the declaration exits. [...] You can use the function alloca to get an effect much like variable-length arrays.

引用: https://gcc.gnu.org/onlinedocs/gcc/Variable-Length.html

根据man 3 alloca:

The space allocated by alloca() is allocated within the stack frame

请记住:

ISO C++ forbids variable length arrays

或者,您可以动态分配数组(使用 new),或者最好尽可能使用 C++ 容器。


编辑:根据 Paul 的评论添加了关于编译器之间变量行为的注释。

关于数组中的 C++ 内存分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33762522/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com