标签:
杂谈 |
http://s2/bmiddle/001JlIk9zy6XekVTcoL87stl中map,list,deque,vector内存占用分析" />
| |
GNU libstdc++ v3 |
Visual Studio 2010 |
Visual Studio 2013 |
LLVM libc++ |
Apache stdcxx |
|
sizeof(vector) |
24 |
32 |
24 |
24 |
24 |
|
vector capacity() after one push_back() |
1 |
1 |
1 |
1 |
33 |
|
sizeof(deque) |
80 |
48 |
40 |
48 |
48 |
|
deque “node map” initial size (bytes) |
64 |
64 |
64 |
8 |
272 |
|
deque “page size” (bytes) |
max(512, sizeof(T)) |
max(16, sizeof(T)) |
max(16, sizeof(T)) |
max(4096, |
32 * sizeof(T) |
|
sizeof(list) |
16 |
24 |
16 |
24 |
32 |
|
list node size |
16 + sizeof(T) |
16 + sizeof(T) |
16 + sizeof(T) |
16 + sizeof(T) |
16 + sizeof(T) |
|
list nodes required |
size() |
1 + size() |
1 + size() |
size() |
size() |
|
sizeof(map) |
48 |
32 |
16 |
24 |
56 |
|
map node size |
32 + sizeof(pair) |
26‡ + sizeof(pair) |
26‡ + sizeof(pair) |
25‡ + sizeof(pair) |
32 + sizeof(pair) |
|
map nodes required |
size() |
1 + size() |
1 + size() |
size() |
1 + highest ever size() |
†
‡
关于在数据量大,例如千万、亿级别的时候,使用容器所带来的内存开销分析,这篇文章非常详细http://info.prelert.com/blog/stl-container-memory-usage。
顺便测试一下vs2013中几个容器最大容纳数量:
X64 max_size()返回值:
Vector
4611686018427387903
List
768614336404564650
Map
461168601842738790
Win32 max_size()返回值:
vector
1,073,741,823
list
357,913,941
map
178,956,970
win32实际测试达不到理论值就无法alloc了,不管内存和堆栈怎么设置:
vector
136,216,567
list
88,268,915
map
64,396,404
x64则可以一直吃到内存爆掉http://www/uc/myshow/blog/misc/gif/E___6702EN00SIGG.gifstl中map,list,deque,vector内存占用分析" TITLE="c++

加载中…