C
chris
I've just done a performance test on the shared_ptr compared to the
native pointer case, the results show at lease 3 times slower when the
iteration number > 10000, this is the code snippet:
#include <vector>
#include <iostream>
#include <boost/shared_ptr.hpp>
using namespace std;
using namespace boost;
class Thing
{
public:
Thing()
{
}
void method (void)
{
int i = 5;
}
};
typedef boost::shared_ptr<Thing> ThingPtr;
void processThing(Thing* thing)
{
thing->method();
}
//loop1 and loop2 test shared_ptr in the vector container
void loop1(long long num)
{
vector<ThingPtr> thingPtrs;
for(int i=0; i< num; i++) {
ThingPtr p1(new Thing);
thingPtrs.push_back(p1);
}
}
void loop2(long long num)
{
vector<Thing> thingPtrs;
for(int i=0; i< num; i++) {
Thing thing;
thingPtrs.push_back(thing);
}
thingPtrs.clear();
}
//loop3 and loop4 test shared_ptr in the vector container
void loop3(long long num)
{
for(int i=0; i< num; i++) {
ThingPtr p1(new Thing);
processThing(p1.get());
}
}
void loop4(long long num)
{
for(int i=0; i< num; i++) {
Thing* p1 = new Thing();
processThing(p1);
delete p1;
}
}
The results are the following:
CPU: Intel Core2 Quad CPU Q8200
RAM: 4G
OS: Windows XP SP2
Compiler: Visual Studio 2005
loop1 vs loop2: 100000 times
loop1 elapsed 390 msec
loop2 elapsed 93 msec
loop5 vs loop6: 100000 times
loop5 elapsed 171 msec
loop6 elapsed 78 msec
If we heavily use the boost::shared_ptr in a large project, is that a
big porformance problem?
chris
native pointer case, the results show at lease 3 times slower when the
iteration number > 10000, this is the code snippet:
#include <vector>
#include <iostream>
#include <boost/shared_ptr.hpp>
using namespace std;
using namespace boost;
class Thing
{
public:
Thing()
{
}
void method (void)
{
int i = 5;
}
};
typedef boost::shared_ptr<Thing> ThingPtr;
void processThing(Thing* thing)
{
thing->method();
}
//loop1 and loop2 test shared_ptr in the vector container
void loop1(long long num)
{
vector<ThingPtr> thingPtrs;
for(int i=0; i< num; i++) {
ThingPtr p1(new Thing);
thingPtrs.push_back(p1);
}
}
void loop2(long long num)
{
vector<Thing> thingPtrs;
for(int i=0; i< num; i++) {
Thing thing;
thingPtrs.push_back(thing);
}
thingPtrs.clear();
}
//loop3 and loop4 test shared_ptr in the vector container
void loop3(long long num)
{
for(int i=0; i< num; i++) {
ThingPtr p1(new Thing);
processThing(p1.get());
}
}
void loop4(long long num)
{
for(int i=0; i< num; i++) {
Thing* p1 = new Thing();
processThing(p1);
delete p1;
}
}
The results are the following:
CPU: Intel Core2 Quad CPU Q8200
RAM: 4G
OS: Windows XP SP2
Compiler: Visual Studio 2005
loop1 vs loop2: 100000 times
loop1 elapsed 390 msec
loop2 elapsed 93 msec
loop5 vs loop6: 100000 times
loop5 elapsed 171 msec
loop6 elapsed 78 msec
If we heavily use the boost::shared_ptr in a large project, is that a
big porformance problem?
chris