Refactor: Remove unused features and functions, and move most allocator operations to a global namespace. (#750)
* Factor out explicit Config type Instead of using snmalloc::Alloc::Config, expose snmalloc::Config, which is then used to derive the allocator type. * Move globalalloc to front end. * Remove unneed template parameter from global snmalloc functions. * Remove SNMALLOC_PASS_THROUGH VeronaRT now has an abstraction layer which can easily replace the allocator. Having such a complex integration still in snmalloc does not make sense. * Take some global functions off of local alloc. * Drop comparison overloads on atomic Capptr. Performing a comparison on two atomic ptr is a complex operation, and should not be implicit. The memory model order and such things needs to be considered by the caller. * Remove function_ref and use templates The implementation prefers to use templates over the function_ref. This now only exists in the Pal for a currently unused feature. * Removing function_ref reduces stl needs. * Remove use of __is_convertible to support older g++ * Inline function that is only used once. * Remove unused function * Restrict ThreadAlloc usage to globalalloc This commit introduces various inline functions on snmalloc:: that perform allocation/deallocation using the thread local allocator. They remove all usage from a particular test. * Move cheri checks to own file. * Refactor is_owned checks. * Move alloc_size and check_size to globalalloc. * Minor simplification of dealloc path * Fix up is_owned to take a config * Improve usage of scoped allocator. * Handle Config_ in globalalloc.
This commit is contained in:
committed by
GitHub
parent
6d50141e35
commit
5f7baef755
@@ -8,8 +8,6 @@ using namespace snmalloc;
|
||||
template<ZeroMem zero_mem>
|
||||
void test_alloc_dealloc(size_t count, size_t size, bool write)
|
||||
{
|
||||
auto& alloc = ThreadAlloc::get();
|
||||
|
||||
{
|
||||
MeasureTime m;
|
||||
m << "Count: " << std::setw(6) << count << ", Size: " << std::setw(6)
|
||||
@@ -20,7 +18,7 @@ void test_alloc_dealloc(size_t count, size_t size, bool write)
|
||||
// alloc 1.5x objects
|
||||
for (size_t i = 0; i < ((count * 3) / 2); i++)
|
||||
{
|
||||
void* p = alloc.alloc<zero_mem>(size);
|
||||
void* p = snmalloc::alloc<zero_mem>(size);
|
||||
SNMALLOC_CHECK(set.find(p) == set.end());
|
||||
|
||||
if (write)
|
||||
@@ -36,13 +34,13 @@ void test_alloc_dealloc(size_t count, size_t size, bool write)
|
||||
void* p = *it;
|
||||
set.erase(it);
|
||||
SNMALLOC_CHECK(set.find(p) == set.end());
|
||||
alloc.dealloc(p, size);
|
||||
snmalloc::dealloc(p, size);
|
||||
}
|
||||
|
||||
// alloc 1x objects
|
||||
for (size_t i = 0; i < count; i++)
|
||||
{
|
||||
void* p = alloc.alloc<zero_mem>(size);
|
||||
void* p = snmalloc::alloc<zero_mem>(size);
|
||||
SNMALLOC_CHECK(set.find(p) == set.end());
|
||||
|
||||
if (write)
|
||||
@@ -55,12 +53,12 @@ void test_alloc_dealloc(size_t count, size_t size, bool write)
|
||||
while (!set.empty())
|
||||
{
|
||||
auto it = set.begin();
|
||||
alloc.dealloc(*it, size);
|
||||
snmalloc::dealloc(*it, size);
|
||||
set.erase(it);
|
||||
}
|
||||
}
|
||||
|
||||
snmalloc::debug_check_empty<snmalloc::Alloc::Config>();
|
||||
snmalloc::debug_check_empty();
|
||||
}
|
||||
|
||||
int main(int, char**)
|
||||
|
||||
Reference in New Issue
Block a user