ich einige Test basiert auf Informationen durchgeführt haben, dass ich in http://www.umich.edu/~eecs381/handouts/C++11_smart_ptrs.pdfmake_shared Leistung Einzel vs Doppelbelegung
Der Zweck der Messung lesen war zu überprüfen, wie viel zeitraubende Einzelbelegung und Doppelbelegung (schlechter Stil) von shared_ptr ist. Ich gehe davon aus, dass die Einzelzuteilung weniger zeitaufwändig sein sollte als die Doppelzuteilung. Also ich würde gerne wissen, ob ich etw falsch verstanden habe oder Speicherzuweisung keine Korrelation mit der Zeit hat.
Der Testcode:
#include <iostream>
#include <memory>
#include <chrono>
#include <string>
using namespace std;
class Test{
private:
int value;
string name;
double value2;
public:
Test(int v, string n, double v2) : value(v), name(n), value2(v2){}
~Test(){}
};
void singleAllocation(){
chrono::system_clock::time_point start = chrono::system_clock::now();
for(int i = 0; i < 3000; i++)
shared_ptr<Test> sp(make_shared<Test>(10, "This is simple test", 2.3334));
chrono::system_clock::time_point end = chrono::system_clock::now();
cout<<"single allocation of 3000 objects took "
<<chrono::duration_cast<chrono::microseconds>(end - start).count()
<<"us.\n";
}
void doubleAllocation(){
chrono::system_clock::time_point start = chrono::system_clock::now();
for(int i = 0; i < 3000; i++)
shared_ptr<Test> sp(new Test(10, "This is simple test", 2.3334));
correlaction
chrono::system_clock::time_point end = chrono::system_clock::now();
cout<<"\n\ndouble allocation of 3000 objects took "
<<chrono::duration_cast<chrono::microseconds>(end - start).count()
<<"us.\n";
}
int main(){
singleAllocation();
doubleAllocation();
}
Der Ausgang: Einzelbelegung von 3000 Objekten nahm 2483us.
doppelte Zuweisung von 3000 Objekten dauerte 1226us.
Ich habe gerade kompiliert und führen Sie Ihren Code mit einigen weiteren Iterationen (3000000). Die Single-Allokation ist immer schneller: Single braucht 1.04s, Double braucht 1.23s. Haben Sie im Freigabemodus kompiliert? – pschill
Ich habe kompiliert mit: g ++ --std = C++ 11 file.cpp -o file.out – Lukasz
Vielleicht hilft es, wenn Sie die Optimierung einschalten durch Hinzufügen von '-O3' nach' --std = C++ 11'. Leider bin ich auf Windows, also kann ich es jetzt nicht ausprobieren. – pschill