【发布时间】:2015-05-27 08:56:53
【问题描述】:
给定一个结构MyData,其中存在许多实例(我会说最多数百万个),对于每个实例,我需要存储一个成员,该成员可能包含最多 8 个键的值。键始终是int,范围为0-7,值始终是浮点的3D 点(我们称之为Point3)。
最多包含:
Key | Value
-------------
0 | [x,y,z]
1 | [x,y,z]
2 | [x,y,z]
3 | [x,y,z]
4 | [x,y,z]
5 | [x,y,z]
6 | [x,y,z]
7 | [x,y,z]
但是,在 99.9% 的情况下,它将包含 0 或 1 个键值对,例如:
Key | Value
-------------
1 | [x,y,z]
与始终存储 8 个 Point3 的数组(每个浮点数 * 3 个值 * 8 个插槽 = 96 字节)和单个 BYTE 位,其中槽位包含有意义的值?
一般来说,我的问题是空的或几乎空的std::map的内存开销是多少?
【问题讨论】:
-
使用向量,两全其美。无论如何,线性搜索在这种规模上可能比 bst 搜索更快。至于空地图大小:几个指针,几乎是空的:依赖于实现。
-
@Slava 谢谢。我知道您的意思是
std::vector或struct { int i; Point3 p; },是吗? -
您可能想深入了解 STL 的实现,看看 std::map 是如何实现的。这可能会因一种实现而异。您也可以自己试验一下,看看会发生什么。
-
见 gotw.ca/publications/mill14.htm 以了解 std 容器的内存开销。我认为数组或向量在内存和速度上更有效。
标签: c++ visual-studio-2010 visual-c++