gpt4 book ai didi

c++ - std::array<> 是否只保证在堆栈上分配?

转载 作者:IT老高 更新时间:2023-10-28 12:45:36 28 4
gpt4 key购买 nike

std::array<int,10> (我自己没有使用 new )保证在 C++ 标准中分配在堆栈而不是堆中?

要清楚,我的意思不是 new std::array<int, 10> .我主要想知道,是否允许标准库使用new在其实现中。

最佳答案

TL;DR:是的,它在堆栈上。


更长的故事:

C++ 没有堆栈或堆的概念。这些是实现细节,并且至少有一个平台不使用传统堆栈(而是使用堆分配的链表)。

它有自动存储和免费存储。 new 访问空闲存储,“堆栈上”的变量进入自动存储。

实际上,为了在空闲存储上分配东西,您必须冒内存不足异常的风险。所以一般规则是保证不扔的东西必须使用自动存储。 array 做出了这个保证(除了它里面的任何东西都可以抛出,自然)。它也是普通旧数据的集合,实际上被迫看起来像:

template<class T,std::size_t N>
struct array {
T __no_fixed_name__[N];
// non-constructor/destructor methods omitted as they are noise at this point
};

理论上它可以由编译器通过不是真正的 C++ 的魔法来实现,但没有必要,所以没有人打扰。

总之:是的,std::array 在堆栈上。

关于c++ - std::array<> 是否只保证在堆栈上分配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39548254/

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