【问题标题】:Container Data Structure similar to std::vector and std::list类似于 std::vector 和 std::list 的容器数据结构
【发布时间】:2016-07-05 21:48:48
【问题描述】:

我目前(在设计阶段)正在开发一种使用自定义 IR 的小型编译器。我遇到的问题是选择一个有效的容器数据结构来包含所有指令。

一个基本块将包含大约 10000 条指令,一条指令大约有大约 250 个字节。

我考虑过使用列表,因为编译器将进行大量复杂的转换(即大量随机插入/删除),因此拥有一个不会使迭代器无效的容器数据结构会很好。因为它会使转换算法简单易懂。

另一方面,由于缓存未命中和内存碎片的已知问题,这将导致性能损失。 std::vector 在这里会有所帮助,但我想用向量实现转换会很痛苦。

所以问题是,是否有另一个数据结构具有低内存碎片以减少内存缓存未命中并且不会使迭代器无效。 或者我是否应该忽略这一点并继续使用列表。

【问题讨论】:

  • 我建议尝试解决迭代器失效问题

标签: list c++11 vector containers c++14


【解决方案1】:

以using Container = std::vector<Instruction> 开头。 std::vector 是一个非常好的默认容器。一旦性能成为问题,程序就会使用几个不同的容器。您应该能够更换 Container 而无需对其余代码进行太多更改。我想某种数组列表会是最好的,但你应该检查一下。

【讨论】:

  • 我不确定这是否可能,因为当我随机插入和删除元素时,迭代器无效,这正是我不想要的行为。所有的转换(还有算法)都必须重写,这也不好。
  • @lled 如果您需要稳定的迭代器和随机插入和删除,除了内存碎片链表之外别无他法。看看你是否可以对向量使用索引而不是迭代器。
猜你喜欢
  • 2014-03-23
  • 2013-03-24
  • 1970-01-01
  • 2020-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-07
相关资源
最近更新 更多