-
Notifications
You must be signed in to change notification settings - Fork 16
/
Copy pathsmart_pointer_raw_pointer_speed_test.cpp
153 lines (138 loc) · 5.66 KB
/
smart_pointer_raw_pointer_speed_test.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
#include <chrono>
#include <iostream>
#include <string>
#include <vector>
#include <fstream>
class Class1 {
private:
std::string s;
int i;
float f;
};
#define YourClass Class1
void speedTest() {
std::ofstream ps_file("../../pointer_speed.csv");
ps_file << "raw create"
<< ","
<< "raw total"
<< ","
<< "unqiue create"
<< ","
<< "unqiue total"
<< ","
<< "shared create"
<< ","
<< "shared total"
<< ","
<< "obj create"
<< ","
<< "obj total"
<< ","
<< "total" << std::endl;
for(size_t t = 0; t < 100; ++t) {
int times = 100000;
auto start_total = std::chrono::system_clock::now();
std::chrono::system_clock::time_point start_raw;
std::chrono::system_clock::time_point created_raw;
std::chrono::system_clock::time_point end_raw;
{
std::vector<YourClass*> yourClasses(times);
start_raw = std::chrono::system_clock::now();
for(size_t i = 0; i < times; ++i) {
yourClasses[i] = new YourClass();
}
created_raw = std::chrono::system_clock::now();
for(size_t i = 0; i < times; ++i) {
delete yourClasses[i];
}
end_raw = std::chrono::system_clock::now();
}
auto diff_create_raw =
std::chrono::duration_cast<std::chrono::microseconds>(created_raw -
start_raw);
auto diff_raw = std::chrono::duration_cast<std::chrono::microseconds>(
end_raw - start_raw);
std::cout << "raw create/total: " << diff_create_raw << "/" << diff_raw
<< std::endl;
ps_file << diff_create_raw.count() << "," << diff_raw.count() << ",";
std::chrono::system_clock::time_point start_unique;
std::chrono::system_clock::time_point created_unique;
std::chrono::system_clock::time_point end_unique;
{
std::vector<std::unique_ptr<YourClass>> yourClasses(times);
start_unique = std::chrono::system_clock::now();
for(size_t i = 0; i < times; ++i) {
yourClasses[i] = std::make_unique<YourClass>();
}
created_unique = std::chrono::system_clock::now();
yourClasses.clear();
end_unique = std::chrono::system_clock::now();
}
auto diff_create_unique =
std::chrono::duration_cast<std::chrono::microseconds>(
created_unique - start_unique);
auto diff_unique =
std::chrono::duration_cast<std::chrono::microseconds>(end_unique -
start_unique);
std::cout << "unique create/total: " << diff_create_unique << "/"
<< diff_unique << std::endl;
ps_file << diff_create_unique.count() << "," << diff_unique.count()
<< ",";
std::chrono::system_clock::time_point start_shared;
std::chrono::system_clock::time_point created_shared;
std::chrono::system_clock::time_point end_shared;
{
std::vector<std::shared_ptr<YourClass>> yourClasses(times);
start_shared = std::chrono::system_clock::now();
for(size_t i = 0; i < times; ++i) {
yourClasses[i] =
std::make_shared<YourClass>();
}
created_shared = std::chrono::system_clock::now();
yourClasses.clear();
end_shared = std::chrono::system_clock::now();
}
auto diff_create_shared =
std::chrono::duration_cast<std::chrono::microseconds>(
created_shared - start_shared);
auto diff_shared =
std::chrono::duration_cast<std::chrono::microseconds>(end_shared -
start_shared);
std::cout << "shared create/total: " << diff_create_shared << "/"
<< diff_shared << std::endl;
ps_file << diff_create_shared.count() << "," << diff_shared.count()
<< ",";
std::chrono::system_clock::time_point start_obj;
std::chrono::system_clock::time_point created_obj;
std::chrono::system_clock::time_point end_obj;
{
std::vector<YourClass> yourClasses;
yourClasses.reserve(times);
start_obj = std::chrono::system_clock::now();
for(size_t i = 0; i < times; ++i) {
yourClasses.emplace_back();
}
created_obj = std::chrono::system_clock::now();
yourClasses.clear();
end_obj = std::chrono::system_clock::now();
}
auto diff_create_obj =
std::chrono::duration_cast<std::chrono::microseconds>(created_obj -
start_obj);
auto diff_obj = std::chrono::duration_cast<std::chrono::microseconds>(
end_obj - start_obj);
std::cout << "obj create/total: " << diff_create_obj << "/" << diff_obj
<< std::endl;
ps_file << diff_create_obj.count() << "," << diff_obj.count() << ",";
auto end_total = std::chrono::system_clock::now();
auto diff_total = std::chrono::duration_cast<std::chrono::microseconds>(
end_total - start_total);
std::cout << "Total " << diff_total << std::endl;
ps_file << diff_total.count() << std::endl;
}
ps_file.close();
}
int main(int argc, char** argv) {
speedTest();
return 0;
}