Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用“vector”的性能差异<;bool>;`vs`vector<;uint8_t>`_C++_Performance - Fatal编程技术网

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;iif(i
std::vector
可以专用于使用单个位。请记住,访问整个字节比访问单个位要快。另外,您是否尝试过
-O3
?@Yashas我从一篇链接帖子中找到了一条评论,David Schwartz评论道“如果您非常关心性能,请不要使用vector。标准要求vector非常节省空间,这会带来性能成本。"我猜这就是你的意思。该标准允许对
std::vector
进行专门化,以利用单个位。访问字节相当快,但要访问单个位,需要执行额外的逐位操作。你可以在这里找到更多信息:标准不要求更节省空间。它很简单定义了一个AIK。