【发布时间】:2021-12-13 10:14:08
【问题描述】:
在 gcc 中,我测量了 sizeof(std::stack<int>),它显示了 80 个字节。为什么这么大?
它可以包含指向顶部的指针和大小。即使它还包含指向分配器的指针,也不能超过 20 个字节。
另一个例子,sizeof(std::set<int>) 是 48 个字节。
【问题讨论】:
-
是的,这两个容器看起来确实有点胖(粗略一瞥)。是的,您几乎必须成为成员的大小是正确的 - 因为要求 C++11 中的大小需要为 O(1)。您的实现作为数据成员有什么?
-
stack只是容器适配器。默认情况下,std::deque存储在适配器内部。通过指针和大小变量来实现双端队列是相当困难的。 -
默认情况下(可以更改)
std::stack包含一个std::deque,其中包含不连续的元素、对某些操作的复杂性等的要求等。这组属性需要将以std::deque的大小表示的簿记元素的数量(例如,至少一对迭代器、单独存储大小等)。