我正在使用std :: map,无法理解它消耗了多少内存。
我有以下地图定义:
CKey {
long x;
int y;
int z;
bool operator<(const CKey& l) const;
};
CValue {
int data1;
int data2;
}
std::map<CKey, CValue> map;
std::cout << "sizeof() = " << sizeof(map) << " Max #Elms = " << map.max_size();
Run Code Online (Sandbox Code Playgroud)
(在地图中插入元素之前或之后都没有问题)
sizeof() = 48
Max_Size = 329406144173384850
Run Code Online (Sandbox Code Playgroud)
在C和C ++中,sizeof运算符告诉您该类实例将占用多少字节的堆栈空间。
与其他标准容器(除外std::array)一样,在使用默认分配器时map在堆上分配其元素。这意味着其静态大小(即sizeof返回的内容)不取决于中的元素数量map。
您可以map使用size()成员函数找出a中有多少个元素。max_size()另一方面,成员函数告诉您map理论上可以存储多少个元素-在64位系统上,几乎可以肯定,您将受到系统上RAM数量的限制,而不是max_size()返回的内容。
实际计算a的总内存使用量(堆栈和堆)map不是一件容易的事:在C ++ 17中,您可能可以执行以下操作
sizeof(map) + map.size() * sizeof(typename map::node_type);
Run Code Online (Sandbox Code Playgroud)
给您一个大概的猜测,但这实际上取决于标准库的实现细节。