LxL*_*LxL 1 c++ optimization list c++11 forward-list
我用下面的代码比较std::list有std::forward_list
#include <iostream>
#include <list>
#include <forward_list>
#include <windows.h>
int main()
{
LARGE_INTEGER start_;
LARGE_INTEGER end_;
LARGE_INTEGER freq;
QueryPerformanceFrequency(&freq);
std::list<long long> list;
QueryPerformanceCounter(&start_);
for(long long i=0;i<50000000;i++)
list.push_front(i);
QueryPerformanceCounter(&end_);
std::cout<< (end_.QuadPart - start_.QuadPart) / (freq.QuadPart / 1000) <<"\n";
cin.get();
}
Run Code Online (Sandbox Code Playgroud)
我改了名单forward_list .测量结果的时间和大小:
//long long
// size time
//forward list 1157.3 2360
//list 1157.3 2450
Run Code Online (Sandbox Code Playgroud)
我也为此代码做了同样的事情:
int main()
{
LARGE_INTEGER start_;
LARGE_INTEGER end_;
LARGE_INTEGER freq;
QueryPerformanceFrequency(&freq);
std::list<char> list;
QueryPerformanceCounter(&start_);
for(long long i=0;i<50000000;i++)
list.push_front('a');
QueryPerformanceCounter(&end_);
std::cout<< (end_.QuadPart - start_.QuadPart) / (freq.QuadPart / 1000 )<<"\n";
std::cin.get();
}
Run Code Online (Sandbox Code Playgroud)
结果:
//char
// size time
//forward list 773 2185
//list 1157 2400
Run Code Online (Sandbox Code Playgroud)
问题是为什么使用std::forward_list whith char比使用long long要好得多std::list.
我知道速度几乎相同,但容器的大小呢?
//long long
// size(mb) time
//forward list 1157.3 2360
//list 1157.3 2450
//char
// size(mb) time
//forward list 773 2185
//list 1157 2400
Run Code Online (Sandbox Code Playgroud)
首先要注意的是,这几乎没有"好多了".差异完全是微不足道的.
除此之外,我认为复制8个字节需要比复制一个字节稍长一些; 另外,您的常量所需的寄存器/内存没有读取'a',其值可以硬编码到您的可执行文件中.
| 归档时间: |
|
| 查看次数: |
357 次 |
| 最近记录: |