【发布时间】:2017-10-22 13:04:06
【问题描述】:
我正在使用 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();
(无论是在向地图中插入元素之前还是之后) 我明白了。
sizeof() = 48
Max_Size = 329406144173384850
- 如果
sizeof(map) = 48,怎么可能包含329406144173384850元素? - 映射是否将
<CKey,Cvalue>保存在其他内存(堆?)中
【问题讨论】:
-
en.cppreference.com/w/cpp/container/map/max_size
max_size会给你在给定当前系统的情况下你可以在地图中放置的最大元素数量,而不是地图中的对数。 -
sizeof运算符返回 object 的大小,而不是它包含的数据。它只是所有成员的sizeof的总和(加上潜在的填充)。这就像在做sizeof(some_pointer),它返回指针的大小,而不是指向的数据的大小。 -
MaxSize 不是你想的那样,Sizeof 也不是你想的那样。 RTFM 是为了一切,而不是仅仅通过他们的名字来猜测。
-
c++ sizeof() of a class with functions 的可能重复项——它不是“完全重复的”,因为它询问的是“具有函数的类”,但很难否认 std::map 是一个类,而且它有方法。
-
你需要
map.size(),而不是sizeof(map)。