Allocators Tools Initial

This commit is contained in:
IlushaShurupov 2023-07-07 00:10:00 +03:00
parent 4a2ab6f5d0
commit 6d0a4676ab
34 changed files with 3847 additions and 0 deletions

View file

@ -0,0 +1,172 @@
#include "allocators.h"
#include <stdio.h>
#include "timer.h"
struct AllocSpeedTets {
const char* test_desc = NULL;
virtual void exec() {};
};
struct Test1 : AllocSpeedTets {
Test1() {
test_desc = "allocate lots of memory of same sizes, then free it all";
}
const int len = 1000;
int size = 100;
void* buff[1000];
void exec_util(tp::AbstractAllocator* alloc) {
for (size_t i = 0; i < len; i++) {
buff[i] = alloc->Alloc(size);
}
for (size_t i = 0; i < len; i++) {
alloc->Free(buff[i]);
}
}
void exec() {
tp::time_ms start, end;
tp::HeapAlloc malloc;
tp::PoolAlloc pool(0, 0);
tp::ChunkAlloc chunck(0, 0);
tp::PickAlloc pick;
start = tp::get_time();
end = tp::get_time();
printf("Malloc : %lli ms \n", end - start);
start = tp::get_time();
end = tp::get_time();
printf("Pool : %lli ms \n", end - start);
start = tp::get_time();
end = tp::get_time();
printf("Chunk : %lli ms \n", end - start);
start = tp::get_time();
end = tp::get_time();
printf("Pick : %lli ms \n", end - start);
}
};
struct Test2 : AllocSpeedTets {
Test2() {
test_desc = "allocate lots of memory of different sizes, then free it all";
}
void exec() {
tp::time_ms start, end;
tp::HeapAlloc malloc;
tp::PoolAlloc pool(0, 0);
tp::ChunkAlloc chunck(0, 0);
tp::PickAlloc pick;
start = tp::get_time();
end = tp::get_time();
printf("Malloc : %lli ms \n", end - start);
start = tp::get_time();
end = tp::get_time();
printf("Pool : %lli ms \n", end - start);
start = tp::get_time();
end = tp::get_time();
printf("Chunk : %lli ms \n", end - start);
start = tp::get_time();
end = tp::get_time();
printf("Pick : %lli ms \n", end - start);
}
};
struct Test3 : AllocSpeedTets {
Test3() {
test_desc = "allocate only a few blocks of memory, free them, and repeat this loop several times \
\n (repeat for same - sized blocks and different - sized blocks)\n";
}
void exec() {
tp::time_ms start, end;
tp::HeapAlloc malloc;
tp::PoolAlloc pool(0, 0);
tp::ChunkAlloc chunck(0, 0);
tp::PickAlloc pick;
start = tp::get_time();
end = tp::get_time();
printf("Malloc : %lli ms \n", end - start);
start = tp::get_time();
end = tp::get_time();
printf("Pool : %lli ms \n", end - start);
start = tp::get_time();
end = tp::get_time();
printf("Chunk : %lli ms \n", end - start);
start = tp::get_time();
end = tp::get_time();
printf("Pick : %lli ms \n", end - start);
}
};
struct Test4 : AllocSpeedTets {
Test4() {
test_desc = "allocate lots of memory of different sizes, free half of it(e.g.the even allocations), then allocateand free memory in a loop\n";
}
void exec() {
tp::time_ms start, end;
tp::HeapAlloc malloc;
tp::PoolAlloc pool(0, 0);
tp::ChunkAlloc chunck(0, 0);
tp::PickAlloc pick;
start = tp::get_time();
end = tp::get_time();
printf("Malloc : %lli ms \n", end - start);
start = tp::get_time();
end = tp::get_time();
printf("Pool : %lli ms \n", end - start);
start = tp::get_time();
end = tp::get_time();
printf("Chunk : %lli ms \n", end - start);
start = tp::get_time();
end = tp::get_time();
printf("Pick : %lli ms \n", end - start);
}
};
void banckmark() {
tp::alloc_init();
const int tests_len = 1;
AllocSpeedTets* tests[] = {
new Test1(),
new Test2(),
new Test3(),
new Test4(),
};
for (int i = 0; i < tests_len; i++) {
printf("Test %i: \n %s\n", i, tests[i]->test_desc);
tests[i]->exec();
delete tests[i];
}
tp::alloc_uninit();
}