在 gcc 中我测量了sizeof(std::stack<int>)它显示 80 字节。为什么这么大?
它可以包含指向顶部的指针和大小。即使它还包含指向分配器的指针,它也不应超过 20 个字节。
另一个例子sizeof(std::set<int>)是48字节。
您知道您可以自己阅读源代码,对吧?
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 个字节。
| 归档时间: |
|
| 查看次数: |
224 次 |
| 最近记录: |