在C++;:如何在内存中管理结构? 我想知道当我们把C++中的容器创建成全局变量时会发生什么。我的理解是,它们是在.data节中创建的,但指向容器中包含的元素及其引用的对象的所有可能指针都是在堆中分配的。对吗?否则,由于.data节是在编译

在C++;:如何在内存中管理结构? 我想知道当我们把C++中的容器创建成全局变量时会发生什么。我的理解是,它们是在.data节中创建的,但指向容器中包含的元素及其引用的对象的所有可能指针都是在堆中分配的。对吗?否则,由于.data节是在编译,c++,C++,在C++;:如何在内存中管理结构? 我想知道当我们把C++中的容器创建成全局变量时会发生什么。我的理解是,它们是在.data节中创建的,但指向容器中包含的元素及其引用的对象的所有可能指针都是在堆中分配的。对吗?否则,由于.data节是在编译时计算的,因此插入对象会造成内存损坏。谢谢 如果在定义时对其进行初始化,则应将其放入.data部分;如果未对其进行初始化,则应将其放入.bss部分。无论哪种方式,由于这两个部分都不是只读的,您可以稍后在程序中的任何地方使用它们,包括插入对象(因

在C++;:如何在内存中管理结构?
我想知道当我们把C++中的容器创建成全局变量时会发生什么。我的理解是,它们是在.data节中创建的,但指向容器中包含的元素及其引用的对象的所有可能指针都是在堆中分配的。对吗?否则,由于.data节是在编译时计算的,因此插入对象会造成内存损坏。谢谢

如果在定义时对其进行初始化,则应将其放入
.data
部分;如果未对其进行初始化,则应将其放入
.bss
部分。无论哪种方式,由于这两个部分都不是只读的,您可以稍后在程序中的任何地方使用它们,包括插入对象(因为这不会发生在编译时),我假设您的意思是指针仍然指向堆上的内存,指针本身不会在堆上分配。如果是这样,那么您的理解是正确的。这取决于容器。动态容器(映射、集合、向量、val_数组)使用堆,只有少量数据位于定义变量的位置。只有
std::array
std::bitset
将所有内容放在一个位置。因为C++20
constexpr
可以在动态容器上使用,在这种情况下,heap没有被使用(因为这样的容器是不可变的)。谢谢大家,更清楚了