Layout
- The meta element on the stack consumes 10 words (80 Byte on x64, 40 Byte on x86).
- Each chunk on the heap has a size of 512 Byte1 if sizeof(val) <= 256 Byte, else sizeof(val).
- The number of the chunks and those the size of the map depends on the amount of values.
1 gcc/libstdc++-v3/include/bits/stl_deque.h
Example
#include <deque> int main() { std::deque<int> deq = { 1, 2, 3, 4, 5 }; return 0; }
$ g++ --version g++ (Ubuntu 13.2.0-4ubuntu3) 13.2.0 $ g++ main.cpp -g $ gdb a.out (gdb) b 6 (gdb) r (gdb) disable pretty-printer (gdb) p /x deq $1 = {... _M_impl = {... _M_map = 0x55555556c2b0, _M_map_size = 0x8, _M_start = {_M_cur = 0x55555556c300, _M_first = 0x55555556c300, _M_last = 0x55555556c500, _M_node = 0x55555556c2c8}, _M_finish = {_M_cur = 0x55555556c314, _M_first = 0x55555556c300, _M_last = 0x55555556c500, _M_node = 0x55555556c2c8}} ...} (gdb) p sizeof(deq) $1 = 80 (gdb) x/8g deq._M_impl._M_map 0x55555556c2b0: 0x0000000000000000 0x0000000000000000 0x55555556c2c0: 0x0000000000000000 0x000055555556c300 0x55555556c2d0: 0x0000000000000000 0x0000000000000000 0x55555556c2e0: 0x0000000000000000 0x0000000000000000 (gdb) x/5w 0x000055555556c300 0x55555556c300: 0x00000001 0x00000002 0x00000003 0x00000004 0x55555556c310: 0x00000005