[英]Why is sizeof(std::stack<int>) so large?
在 gcc 中,我測量了sizeof(std::stack<int>)
並顯示了 80 個字節。 為什么這么大?
它可以包含指向頂部和大小的指針。 即使它也包含指向分配器的指針,它也不應該超過 20 個字節。
另一個例子, sizeof(std::set<int>)
是 48 字節。
你知道你可以自己閱讀源代碼,對吧?
class stack
有一個成員,一個_Sequence
,它是std::deque<_Tp>
的類型別名(並且_Tp
是int
)。
關閉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;
...
};
其中iterator
是具有以下成員的_Deque_iterator
:
struct _Deque_iterator {
...
_Elt_pointer _M_cur;
_Elt_pointer _M_first;
_Elt_pointer _M_last;
_Map_pointer _M_node;
...
}
總結一下:每個迭代器持有 4 個指針(= 64 位系統中的 32 個字節),然后_Deque_impl_data
持有另外兩個指針,總共 80 個字節。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.