64,654
社区成员
发帖
与我相关
我的任务
分享
#include <loki/SmallObj.h>
#include <iostream>
template <class Type = int>
class StopWatch
{
public:
StopWatch()
{
std::cout << "stop watch ...";
m_beginClock = clock();
}
~StopWatch()
{
clock_t endClock = clock();
clock_t interval = endClock-m_beginClock;
double seconds = (double)interval / CLOCKS_PER_SEC;
std::cout << "stop watch : " << seconds << std::endl;
}
private:
clock_t m_beginClock;
};
enum enSmallObjectSize
{
Size_Small = 4,
Size_Big = 2000,
};
class A { int a[Size_Small]; };
class B : public Loki::SmallObject<> { int b[Size_Small]; };
class D { int d[Size_Big]; };
class E : public Loki::SmallObject<> { int e[Size_Big]; };
int test() {
std::cout << "small object (" << sizeof(int) * Size_Small << "byte)" << std::endl;
{
std::cout << "default" << std::endl;
StopWatch<>* sw = new StopWatch<>;
for (int j = 0; j < 10; j++) {
for (int i = 0; i < 1000000; i++) {
A* a = new A;
delete a;
}}
delete sw;
}
{
std::cout << "Loki::SmallObject" << std::endl;
StopWatch<>* sw = new StopWatch<>;
for (int j = 0; j < 10; j++) {
for (int i = 0; i < 1000000; i++) {
B* b = new B;
delete b;
}}
delete sw;
}
std::cout << "big object (" << sizeof(int) * Size_Big << "byte)" << std::endl;
{
std::cout << "default" << std::endl;
StopWatch<>* sw = new StopWatch<>;
for (int j = 0; j < 10; j++) {
for (int i = 0; i < 1000000; i++) {
D* d = new D;
delete d;
}}
delete sw;
}
{
std::cout << "Loki::SmallObject" << std::endl;
StopWatch<>* sw = new StopWatch<>;
for (int j = 0; j < 10; j++) {
for (int i = 0; i < 1000000; i++) {
E* e = new E;
delete e;
}}
delete sw;
}
return 0;
}