由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - STL map变量的实际memory usage估算
相关主题
A question about class size腆着脸在问一道
java里run curl system command的问题a question about bitwise operation
a simple question for C++ class关于C++中一个Class的大小 (转载)
C: struct 里面一个CHAR, 一个INT, 这个STRUCT 占多少字节?auto_ptr_array.h 疑问
数组定义的时候,分配空间了么?C++: 下面代码有啥问题,为什么?
一个指向指针的指针的引用?static 变量放在哪里?C++
C里面一个被分配了内存的指针如何知道分配了多少?看下这个小程序
一个很诡异的ifstream问题,求助~~C++ 全局变量是怎么回事?
相关话题的讨论汇总
话题: map话题: sizeof话题: string话题: 字节话题: 估算
进入Programming版参与讨论
1 (共1页)
g*********s
发帖数: 1782
1
比如声明这样一个变量
using namespace std;
map *nameMap = new(map);
... // 在nameMap里插入了1000个(string, int) pair
现在需要估算这时heap的size增加了多少?
估算如下:
本身sizeof(map<...,...>)是48个字节。
一个string s的size是 sizeof(string) + s.size(),假定字符串长度都是8,则是16。
一个int是4字节。
这样至少是48+1000*(4+16)=2048 bytes。
但是map是用rb_tree实现,加上开销是多少呢?看了一下source code,不太确定是不
是算对了。
每个node包含color, left, right, parent, key, value,其中(key, value)前面算过。
color 1 byte,三个指针,64位机器上,24字节,这样就是25byte。总的字节是:
48+1000*(4+16+1+24)=4548。
如果node是按8-byte
g*********s
发帖数: 1782
2
查了源代码。_Rb_tree_node_base确实有alignment问题。另外Rb_tree还有一个size_type的字段,一个compare字段。
所以sizeof(map<>) = sizeof(_Rb_tree_node_base) + sizeof(size_type) + sizeof(void *) = 32 + 16 = 48.

16。

【在 g*********s 的大作中提到】
: 比如声明这样一个变量
: using namespace std;
: map *nameMap = new(map);
: ... // 在nameMap里插入了1000个(string, int) pair
: 现在需要估算这时heap的size增加了多少?
: 估算如下:
: 本身sizeof(map<...,...>)是48个字节。
: 一个string s的size是 sizeof(string) + s.size(),假定字符串长度都是8,则是16。
: 一个int是4字节。
: 这样至少是48+1000*(4+16)=2048 bytes。

1 (共1页)
进入Programming版参与讨论
相关主题
C++ 全局变量是怎么回事?数组定义的时候,分配空间了么?
underscore usage in C++ name一个指向指针的指针的引用?
指针的大小是 4 byte还是有赖于系统?C里面一个被分配了内存的指针如何知道分配了多少?
C 语言,初学者,简单问题一个很诡异的ifstream问题,求助~~
A question about class size腆着脸在问一道
java里run curl system command的问题a question about bitwise operation
a simple question for C++ class关于C++中一个Class的大小 (转载)
C: struct 里面一个CHAR, 一个INT, 这个STRUCT 占多少字节?auto_ptr_array.h 疑问
相关话题的讨论汇总
话题: map话题: sizeof话题: string话题: 字节话题: 估算