In each article it is written that make_shared is more efficient, than shared_ptr(new T), because of one memory allocation not two. But i try this code:
#include <cstdio>
#include <ctime>
#include <memory>
#include <vector>
static const size_t N = 1L << 25;
int main(void) {
clock_t start = clock();
for ( size_t rcx = 0; rcx < N; rcx++ ) {
auto tmp = std::shared_ptr<std::vector<size_t>>( new std::vector<size_t>( 1024 ) );
}
clock_t end = clock();
printf("shared_ptr with new: %lf\n", ((double)end - start) / CLOCKS_PER_SEC);
start = clock();
for ( size_t rcx = 0; rcx < N; rcx++ ) {
auto tmp = std::make_shared<std::vector<size_t>>( 1024 );
}
end = clock();
printf("make_shared: %lf\n", ((double)end - start) / CLOCKS_PER_SEC);
return 0;
}
compile with:
g++ --std=c++14 -O2 test.cpp -o test
and got this result:
shared_ptr with new: 10.502945
make_shared: 18.581738
Same for boost::shared_ptr:
shared_ptr with new: 10.778537
make_shared: 18.962444
This have answer about LLVM's libc++ is broken, but i use libstdc++ from GNU. So, why make_shared is slower?
P.S. With -O3 optimization got this result:
shared_ptr with new: 5.482464
make_shared: 4.249722
same for boost::shared_ptr.
Aucun commentaire:
Enregistrer un commentaire