C++ 使用“vector”的性能差异<;bool>;`vs`vector<;uint8_t>`
我想提出一个可以用一句话概括的问题: 使用C++ 使用“vector”的性能差异<;bool>;`vs`vector<;uint8_t>`,c++,performance,C++,Performance,我想提出一个可以用一句话概括的问题: 使用vector(慢速)和使用vector(快速)之间的性能差异有何解释?(使用g++8.2-O1和C++17标准编译) 下面是完整的故事 从LeetCode的问题开始。计算小于n的素数 一个解决方案是应用ErasoStes筛选器,其C++代码I将在下面列出。 然而,我很感兴趣地注意到,只有一个区别--向量类型,在性能上存在一致的差距。即 | type | runtime | memory | |-----------------|-
vector
(慢速)和使用vector
(快速)之间的性能差异有何解释?(使用g++8.2-O1和C++17标准编译)
下面是完整的故事
从LeetCode的问题开始。计算小于n的素数
一个解决方案是应用ErasoStes筛选器,其C++代码I将在下面列出。 然而,我很感兴趣地注意到,只有一个区别--
向量
类型,在性能上存在一致的差距。即
| type | runtime | memory |
|-----------------|---------|---------|
| vector<bool> | 68 ms | 8.6 MB |
| vector<uint8_t> | 24 ms | 11.5 MB |
|类型|运行时|内存|
|-----------------|---------|---------|
|向量| 68 ms | 8.6 MB|
|向量| 24毫秒| 11.5 MB|
完整的代码是
类解决方案
{
公众:
整数计数素数(整数n)
{
//向量isprime(n,真);
向量isprime(n,真);
int res=0,root=std::sqrt(n);
对于(int i=2;i if(istd::vector
可以专用于使用单个位。请记住,访问整个字节比访问单个位要快。另外,您是否尝试过-O3
?@Yashas我从一篇链接帖子中找到了一条评论,David Schwartz评论道“如果您非常关心性能,请不要使用vector。标准要求vector非常节省空间,这会带来性能成本。"我猜这就是你的意思。该标准允许对std::vector
进行专门化,以利用单个位。访问字节相当快,但要访问单个位,需要执行额外的逐位操作。你可以在这里找到更多信息:标准不要求更节省空间。它很简单定义了一个AIK。