我编写了一个小程序,使用朴素分割算法计算素数。为了提高性能,我认为它应该只检查基于先前检测到的质数小于等于数字平方根的可分性。
为了做到这一点,我需要跟踪素数。我已经使用动态数组实现了它。 (例如,使用new
和delete
)。我应该使用std::vector
吗?在性能方面哪个更好? (维护不是问题。)
任何帮助,将不胜感激。
答案 0 :(得分:1)
理想答案:
我们怎么知道?这取决于你的编译器,你的操作系统,你的架构,你的标准库实现,行星的对齐......
基准测试。可能是this。 (Haven没有使用它,但似乎很容易使用。)
实际答案:
使用std::vector
。你所做的每new
和delete
都有机会发生内存泄漏,或双重delete
,或者忘记做某事。 std::vector
无论如何基本上都是这样做的。通过最大化优化标记,您更有可能获得相当大的性能提升(如果您正在使用gcc
,请尝试-Ofast
和-march=native
)。
此外:
维护不是问题。
怀疑它。相信我这个。如果没有别的,至少要评论你的代码(但这是另一种蠕虫)。
答案 1 :(得分:1)
出于您的目的,矢量可能更好,因此您无需担心内存管理(例如,增加阵列大小并复制以前的结果),或者保留太多内存来存储结果。