C ++使用哪个容器存储缓存

时间:2018-11-27 13:17:28

标签: c++ performance stl

我目前正在编写一个缓存模拟器,并且正在考虑为该特定应用程序使用哪个容器。

我必须从文件中读取内存,该文件包含以下格式的数据:

[instruction] [32 bit address] [amount of instructions since previous data memory access]

示例:

s 0x1fffff78 1

指令始终为's'或'l',文件范围为1 kB至10 MB。

我正在考虑使用Map,因此可以将指令与地址配对。但是,据我所知,通过检索和插入操作,Map的速度并不快,这违背了缓存的目的。

向量是我的第二选择,但这将使分离三个字段更加困难。如果文件很小,我将使用成对向量,但是事实并非如此。另外,由于我需要按内存地址进行搜索,因此这似乎不是正确的选择。

我应该使用地图,矢量还是有更快/更好的选择?

2 个答案:

答案 0 :(得分:4)

  

我正在考虑使用Map,因此可以将指令与地址配对。但是,据我所知,通过检索和插入操作,Map的速度并不快,这违背了缓存的目的。

std::map通常比您编写用于处理它的代码快得多。如果使用磁盘中的数据填充它,则尤其如此。 请使用std::map 。如果出现性能问题,请对您的代码进行概要分析,然后返回一个包含分析结果的问题。

答案 1 :(得分:0)

最容易编程和使用的可能是开箱即用的std::unordered_map。如果您确实确实需要调整性能的每一个部分,那么您不断排序并使用std::vector进行查找的std::lower_bound可能会更快,即使是在中间插入也是如此。这是因为线性连续存储器只是超快的。例如,如果改进了地图类,将来可能会改变。

例如,请参阅此帖子以获取一些基准测试: https://baptiste-wicht.com/posts/2012/12/cpp-benchmark-vector-list-deque.html