加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

c++ stl中map,list,deque,vector内存占用分析

(2015-11-23 19:38:24)
标签:

杂谈

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,
16 * sizeof(T))

32 * sizeof(T)

sizeof(list)

16

24

16

24

32 or 48†

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() or highest ever 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()

† Depending on whether the _RWSTD_NO_LIST_NODE_BUFFER pre-processor macro is defined
‡ Probably 32 due to alignment

关于在数据量大,例如千万、亿级别的时候,使用容器所带来的内存开销分析,这篇文章非常详细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++ stl中map,list,deque,vector内存占用分析" />
 

 


0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有