我目前正在开发(在Design-Stage)一个使用自定义IR的小型编译器。我遇到的问题是选择一个有效的容器数据结构来包含所有指令。
一个基本块将包含~10000个指令,指令将大约为250个字节。
我考虑过使用一个列表,因为编译器会有很多复杂的转换(即大量的随机插入/删除),因此拥有一个不会使迭代器失效的容器数据结构会很好。因为它可以使转换算法简单易行。
另一方面,由于缓存未命中和内存碎片的已知问题,它将失去性能。 std :: vector在这里有所帮助,但我想用向量实现转换会很痛苦。
所以问题是,如果有另一个数据结构具有低内存碎片以减少内存缓存未命中并且不会使迭代器无效。 或者,如果我应该忽略这一点并继续使用列表。
答案 0 :(得分:0)
从using Container = std::vector<Instruction>
开始。 std::vector
是一个非常好的默认容器。一旦性能成为一个问题,该程序将使用几个不同的容器。您应该可以换出Container
而无需对其余代码进行太多更改。我想某种阵列列表是最好的,但你应该检查一下。