为什么 sizeof(std::stack<int>) 这么大?

Vic*_*nov 3 c++ gcc

在 gcc 中我测量了sizeof(std::stack<int>)它显示 80 字节。为什么这么大?

它可以包含指向顶部的指针和大小。即使它还包含指向分配器的指针,它也不应超过 20 个字节。

另一个例子sizeof(std::set<int>)是48字节。

Bot*_*tje 8

您知道您可以自己阅读源代码,对吧?

class stack有一个成员a ,它是( 并且是)_Sequence的类型别名。std::deque<_Tp>_Tpint

开始实施std::deque这只是一个包装_Deque_base,这是一个包装_Deque_impl。反过来_Deque_impl_data我们得到以下结果:

struct _Deque_impl_data {
    _Map_pointer _M_map;
    size_t _M_map_size;
    iterator _M_start;
    iterator _M_finish;
...
};
Run Code Online (Sandbox Code Playgroud)

其中iteratora_Deque_iterator具有以下成员

struct _Deque_iterator {
...
      _Elt_pointer _M_cur;
      _Elt_pointer _M_first;
      _Elt_pointer _M_last;
      _Map_pointer _M_node;
...
}
Run Code Online (Sandbox Code Playgroud)

总结一下:每个迭代器保存 4 个指针(= 64 位系统中的 32 个字节),然后_Deque_impl_data保存另外两个指针,总共 80 个字节。