First calloc test.

This commit is contained in:
Matthew Parkinson
2020-04-14 09:53:48 +01:00
parent cbaf0f78f2
commit 070aa9467d

View File

@@ -70,6 +70,52 @@ void alloc4(size_t size)
a->dealloc(r);
}
void check_calloc(void* p, size_t size)
{
if (p != nullptr)
{
for (size_t i = 0; i < size; i++)
{
if (((uint8_t*)p)[i] != 0)
abort();
// ((uint8_t*)p)[i] = 0x5a;
}
}
}
void calloc1(size_t size)
{
void* r =
snmalloc::ThreadAlloc::get_noncachable()->alloc<snmalloc::ZeroMem::YesZero>(
size);
check_calloc(r, size);
snmalloc::ThreadAlloc::get_noncachable()->dealloc(r);
}
void calloc2(size_t size)
{
auto a = snmalloc::ThreadAlloc::get_noncachable();
void* r = a->alloc<snmalloc::ZeroMem::YesZero>(size);
check_calloc(r, size);
a->dealloc(r);
}
void calloc3(size_t size)
{
auto a = snmalloc::ThreadAlloc::get_noncachable();
void* r = a->alloc<snmalloc::ZeroMem::YesZero>(size);
check_calloc(r, size);
a->dealloc(r, size);
}
void calloc4(size_t size)
{
auto a = snmalloc::ThreadAlloc::get();
void* r = a->alloc<snmalloc::ZeroMem::YesZero>(size);
check_calloc(r, size);
a->dealloc(r);
}
void dealloc1(void* p, size_t)
{
snmalloc::ThreadAlloc::get_noncachable()->dealloc(p);
@@ -97,16 +143,21 @@ void f(size_t size)
auto t3 = std::thread(alloc3, size);
auto t4 = std::thread(alloc4, size);
auto t5 = std::thread(calloc1, size);
auto t6 = std::thread(calloc2, size);
auto t7 = std::thread(calloc3, size);
auto t8 = std::thread(calloc4, size);
auto a = snmalloc::current_alloc_pool()->acquire();
auto p1 = a->alloc(size);
auto p2 = a->alloc(size);
auto p3 = a->alloc(size);
auto p4 = a->alloc(size);
auto t5 = std::thread(dealloc1, p1, size);
auto t6 = std::thread(dealloc2, p2, size);
auto t7 = std::thread(dealloc3, p3, size);
auto t8 = std::thread(dealloc4, p4, size);
auto t9 = std::thread(dealloc1, p1, size);
auto t10 = std::thread(dealloc2, p2, size);
auto t11 = std::thread(dealloc3, p3, size);
auto t12 = std::thread(dealloc4, p4, size);
t1.join();
t2.join();
@@ -116,6 +167,10 @@ void f(size_t size)
t6.join();
t7.join();
t8.join();
t9.join();
t10.join();
t11.join();
t12.join();
snmalloc::current_alloc_pool()->release(a);
snmalloc::current_alloc_pool()->debug_in_use(0);
printf(".");